如何在同一主题中创建多个kafka消费者组

How to create multiple kafka consumer groups in same topic

以下是必需的场景。

Topic-1 有 6 个分区,现在我想创建 3 个消费者组 cg1、cg2 和 cg3 并像这样映射它 (cg1 - 0,1 ; cg2 - 2,3 ; cg3 - 4,5)。我如何使用 kafka-console-consumer.sh 或 kafka-consumer-groups.sh

创建它

即使是 Kafka 文档也解释了这种情况,但没有提到如何去做。 感谢您的帮助!!!

我现在无法试用,但我认为您需要作为消费者通过它属性

kafka-console-consumer.sh --consumer-property group.id=${your_group_id}

或者如果您有配置文件

kafka-console-consumer.sh --consumer.config ${your_config_file}

Kafka Consumer Group 是共享同一组 ID 的消费者的集合。消费者组通过在消费者之间共享分区来分配处理。

下图显示了一个具有三个分区的主题和一个具有两个成员的使用者组。主题中的每个分区都分配给组中的一个成员。

注意:有n个分区的主题最多可以被Consumer Group的n个消费者消费,每个消费者1个分区。

在您的情况下,如果您在某个主题上使用消费者组,则意味着所有分区都将分配给该消费者组。

但是如果你对 Consumer Group 不感兴趣,你可以直接为每个 Consumer Group 分配一个分区,在这种情况下 rebalance 不会出现

我正在使用 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 <Integer: partition> : The partition to consume from Consumption starts from the end of the partition unless '--offset' is specified.

使用消费者组,您可以描述消费者详细信息

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. 使用 3 个单独的主题来使用单独的消费者组来消费消息。
  2. 在使用消息时以编程方式过滤分区。