要点:
1、一个消费者只能属于一个消费者组
2、消费者组订阅的topic只能被其中的一个消费者消费
3、不同消费者组中的消费者可以消费同一个topic
4、消费者组中的消费者实例个数不能超过分区的数量
假设分区数量设置为1,消费者实例设置为2,这个时候会发现只有1个消费者在消费消息,另一个消费者闲置。
消费者组命令:
创建分区数量为2的topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic topic-test
打开2个命令行窗口,执行同样的语句进行消息消费
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic-test --group group-test
打开1个命令行窗口,进行消息发送
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topic-test
结果:消息被均匀的分配到2个消费者中消费
原理:Kafka能够为一个消费者池提供顺序保证和负载平衡,是通过将topic中的partition分配给消费者组中的消费者来实现的, 以便每个分区由消费组中的一个消费者消耗。通过这样,我们能够确保消费者是该分区的唯一读者,并按顺序消费数据。 众多分区保证了多个消费者实例间的负载均衡。所以消费者组中的消费者实例个数不能超过分区的数量。