Kafka:使用通用消费者组访问多个主题

Ash*_*iya 22 apache-kafka apache-kafka-connect

我们的集群运行 Kafka 0.11,并且对使用消费者组有严格的限制。我们不能使用任意的消费者组,因此管理员必须创建所需的消费者组。

我们运行 Kafka Connect HDFS Sinks 从主题读取数据并写入 HDFS。所有主题只有一个分区。

在 Kafka HDFS Sink 中使用消费者组时,我可以考虑以下两种模式。

如图所示:

案例一:每个topic都有自己的Consumer Group 在此处输入图片说明

案例 2:所有主题都有一个共同的消费者组 在此处输入图片说明

我知道当一个主题有多个分区时,如果一个消费者失败,同一消费者组中的另一个消费者将接管该分区。

我的问题 :

当多个主题共享同一个消费群体时,是否会发生同样的事情?即:如果消费者失败(HDFS 接收器),另一个消费者(HDFS 接收器连接器)是否会接管工作并读取该主题?

更新:每个 Kafka HDFS Sink Connector 只订阅一个主题。

bor*_*ree 44

我很惊讶所有“是”的答案都是错误的。我刚刚测试了它,group.id对于不同主题的消费者使用相同的方法效果很好,并不意味着他们共享消息,因为对于 Kafka 来说,关键(topic, group)不仅仅是(group). 这是我所做的:

  1. 创建了 2 个不同的主题 T1 和 T2,每个主题有 2 个分区
  2. 创建了同组的 2 个消费者 xxx
  3. 将消费者 C1 分配给 T1,将消费者 C2 分配给 T2
  4. 向 T1 生成消息 - 只有分配给 T1 的消费者 C1 处理它们
  5. 向 T2 生成消息 - 只有分配给 T2 的消费者 C2 处理它们
  6. 杀死消费者 C1 并重复 4-5 步。只有消费者 C2 处理来自 T2 的消息
  7. 来自 T1 的消息未被处理

结论:订阅不同主题的同组名消费者不会消费来自其他主题的消息,因为关键是(topic, group)

  • @borN_free 我认为问题是如果消费者 C1 和 C2 分别订阅这两个主题会发生什么。我认为在这种情况下,如果你杀死 C1,C2 将从两个主题中读取 (4认同)
  • @borN_free 我认为没有人声称他们会看到他们不拥有的主题的记录。要完成您的实验,请尝试通过向其中一个主题添加分区来强制重新平衡,您将看到所有消费者(甚至是那些不关心该主题的消费者)停止重新平衡。 (3认同)