【问题标题】:How to create multiple kafka consumer groups in same topic如何在同一主题中创建多个 kafka 消费者组
【发布时间】:2019-11-29 07:39:44
【问题描述】:

以下是必需的场景。

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 文档解释这种情况”?
  • daniu:我想创建它,因为我可以将组 ID 提供给消费者,其他方将在主题中出现一组消费者(比如 6 个分区中的 2 个分区) Thilo:它的示例在假设 p0,p1 和 p2,p3 存在于不同的服务器但相同的主题下,消费者下的 kafka 介绍文档。

标签: apache-kafka consumer


【解决方案1】:

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

下图显示了一个包含三个分区的主题和一个包含两个成员的消费者组。主题中的每个分区都被分配给该组的一个成员。

注意:具有 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 : 从 Consumption 消费的分区从分区的末尾开始,除非 '--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);

请注意,不能将手动分区分配(即使用assign)与通过主题订阅(即使用订阅)进行动态分区分配混合使用。

参考:here

有以下替代方法:

  1. 使用 3 个单独的主题通过单独的消费者组来消费消息。
  2. 在使用消息时以编程方式过滤分区。

【讨论】:

  • 手动分区分配,为什么还要指定组id?那将用于什么?
  • 它不会用于再平衡,但我们可以用来描述
  • 有趣。如果您让一个消费者手动分配而另一个消费者使用自动组重新平衡(对于相同的 groupId)会发生什么?
  • 实际上两个同名的并行消费者组在偏移管理上也会相互冲突。
  • 嗯,这不是两个平行的组,那只是一组。同名是组成员身份的定义。
【解决方案2】:

我现在无法尝试,但我认为您需要将其作为消费者属性传递

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

或者如果你有一个配置文件

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

【讨论】:

  • 这只会为主题中的所有分区分配消费者组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 2020-06-03
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
相关资源
最近更新 更多