图片来源网络
1.创建topic
# 登录到容器
docker exec -it kafka1 bash
//创建一个topic,名称为test_kafka,partitions为2个,replication有3个,topic的name为test2:
kafka-topics --zookeeper zk1:2181,zk2:2181,zk3:2181 --replication-factor 3 --partitions 2 --create --topic test_kafka .
//查看topic
kafka-topics --zookeeper zk1:2181,zk2:2181,zk3:2181 --describe --topic test_kafka
2.启动三组go消费者
#第一组只有一个消费者
go run consumer.go -g t0
//第二组有两个消费者
go run consumer.go -g t1
go run consumer.go -g t1
//第三组有三个消费者
go run consumer.go -g t2
go run consumer.go -g t2
go run consumer.go -g t2
3.启动go生产者
# 分别输入 1,2,3,4,5,6,7,8,9
4.第一组消费者输出
2019/12/22 15:08:54 msg content:topic=test_kafka,partition=0,offset=12,content=1
2019/12/22 15:09:03 msg content:topic=test_kafka,partition=1,offset=12,content=2
2019/12/22 15:09:12 msg content:topic=test_kafka,partition=0,offset=13,content=3
2019/12/22 15:09:21 msg content:topic=test_kafka,partition=1,offset=13,content=4
2019/12/22 15:09:30 msg content:topic=test_kafka,partition=0,offset=14,content=5
2019/12/22 15:09:30 msg content:topic=test_kafka,partition=0,offset=15,content=7
2019/12/22 15:09:30 msg content:topic=test_kafka,partition=1,offset=14,content=6
2019/12/22 15:09:39 msg content:topic=test_kafka,partition=0,offset=16,content=9
2019/12/22 15:09:39 msg content:topic=test_kafka,partition=1,offset=15,content=8
5.第二组消费者输出
#客户端1
2019/12/22 15:09:05 msg content:topic=test_kafka,partition=1,offset=12,content=2
2019/12/22 15:09:23 msg content:topic=test_kafka,partition=1,offset=13,content=4
2019/12/22 15:09:32 msg content:topic=test_kafka,partition=1,offset=14,content=6
2019/12/22 15:09:32 msg content:topic=test_kafka,partition=1,offset=15,content=8
#客户端2
2019/12/22 15:08:47 msg content:topic=test_kafka,partition=0,offset=12,content=1
2019/12/22 15:09:14 msg content:topic=test_kafka,partition=0,offset=13,content=3
2019/12/22 15:09:32 msg content:topic=test_kafka,partition=0,offset=14,content=5
2019/12/22 15:09:32 msg content:topic=test_kafka,partition=0,offset=15,content=7
2019/12/22 15:09:41 msg content:topic=test_kafka,partition=0,offset=16,content=9
6.第三组消费者输出
#客户端1
2019/12/22 15:09:04 msg content:topic=test_kafka,partition=1,offset=12,content=2
2019/12/22 15:09:23 msg content:topic=test_kafka,partition=1,offset=13,content=4
2019/12/22 15:09:32 msg content:topic=test_kafka,partition=1,offset=14,content=6
2019/12/22 15:09:32 msg content:topic=test_kafka,partition=1,offset=15,content=8
#客户端2
2019/12/22 15:08:46 msg content:topic=test_kafka,partition=0,offset=12,content=1
2019/12/22 15:09:14 msg content:topic=test_kafka,partition=0,offset=13,content=3
2019/12/22 15:09:32 msg content:topic=test_kafka,partition=0,offset=14,content=5
2019/12/22 15:09:32 msg content:topic=test_kafka,partition=0,offset=15,content=7
2019/12/22 15:09:41 msg content:topic=test_kafka,partition=0,offset=16,content=9
#客户端3
什么也没有
7.结论
1.消息将会被均匀的分布到不同的分区中 实现了负载均衡和水平扩展
2.消息会全量落到不同的消费者组
3.消费者组内的消费者共享一个消费者组ID 组内的消费者共同对一个主题进行订阅和消费
4.消费者组中的消费者只能消费一个分区的消息 多余的消费者会闲置