以下是必填方案。
主题1有6个分区,现在我想创建3个消费者组cg1,cg2和cg3并像这样映射它(cg1-0,1; cg2-2,3; cg3-4,5)。如何使用kafka-console-consumer.sh或kafka-consumer-groups.sh
创建它甚至Kafka文档也对此情况进行了说明,但没有地方提到如何做到这一点。 任何帮助表示赞赏!!!
答案 0 :(得分:2)
Kafka消费者组是一组共享相同组ID的消费者。消费者组通过在各个消费者之间共享分区来分发处理。
下图显示了具有三个分区的单个主题和具有两个成员的使用者组。主题中的每个分区都被精确分配给组中的一个成员。
注意: 具有n个分区的主题最多可以由n个消费者组的消费者最大消耗,每个消费者1个分区。
在您的情况下,如果您在某个主题上使用使用者组,则意味着所有分区都将分配给该使用者组。
但是,如果您对消费者组不感兴趣,可以直接将分区分配给每个消费者组,这样就不会出现平衡问题
我正在使用Kafka Confluent-kafka 2.6.0-5.1.2:
sh kafka-console-consumer --bootstrap-server localhost:9092 --partition 0 --topic abc --group cg1
sh kafka-console-consumer --bootstrap-server localhost:9092 --partition 1 --topic abc --group cg1
-partition:要消耗的分区从该分区的末尾开始,除非'--offset'为 指定。
使用消费者组,您可以描述消费者详细信息
sh kafka-consumer-groups --bootstrap-server localhost:9020 --describe --group a
TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
abc 0 123 678 0 - - -
abc 1 234 345 0 - - -
您还可以通过以下方式通过Java手动分配分区
List<TopicPartition> partitions = new ArrayList<>();
partitions.add(new TopicPartition("abc", 0));
partitions.add(new TopicPartition("abc", 1));
......
new KafkaConsumer<>(consumerProperties).assign(partitions);
请注意,不可能通过主题订阅(即使用订阅)将手动分区分配(即使用分配)与动态分区分配混合使用。
参考:here
有以下几种替代方法:
答案 1 :(得分:0)
我现在无法尝试,但我认为您需要将其作为消费者财产通过
kafka-console-consumer.sh --consumer-property group.id=${your_group_id}
或者如果您有配置文件
kafka-console-consumer.sh --consumer.config ${your_config_file}