当前位置: 首页 > 知识库问答 >
问题:

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

景岳
2023-03-14

我们的集群运行Kafka0.11并且对使用消费者组有严格的限制,我们不能使用任意的消费者组,所以Admin必须创建所需的消费者组。

我们运行Kafka连接HDFS接收器,从主题读取数据并写入HDFS。所有主题只有一个分区。

在Kafka HDFS接收器中使用消费者组时,我可以考虑遵循两种模式。

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

我的问题:

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

更新:每个Kafka HDFS接收器连接器只订阅一个主题。

共有1个答案

谢俊英
2023-03-14

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

  1. 创建了两个不同的主题T1和T2,每个主题中有两个分区
  2. 创建了2个具有相同组xxx
  3. 的使用者
  4. 将使用者C1分配给T1,将使用者C2分配给T2
  5. 向T1生成消息-仅分配给T1的使用者C1处理这些消息
  6. 向T2生成消息-仅分配给T2的消费者C2处理消息
  7. 杀死消费者C1并重复4-5个步骤。只有使用者C2处理来自T2的消息
  8. 未处理来自T1的消息

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

 类似资料:
  • 我们正在开发一个应用程序,我们想听Kafka中不止一个主题。所有主题都有一个分区。所有主题名称都有一个公共的前缀,例如“test-x”、“test-y”,所以我们可以对它使用spring。 我们希望编写一个java spring使用者,它使用模式监听所有主题。我们的想法是,我们可以运行同一个消费者(属于同一个组)的多个实例,Kafka将为不同的消费者分发来自不同主题的消息。 然而,这似乎并不奏效。

  • 我有一个主题列表(目前是10个),其大小可以在未来增加。我知道我们可以产生多个线程(每个主题)来消耗每个主题,但在我的例子中,如果主题的数量增加,那么消耗主题的线程数量也会增加,这是我不希望的,因为主题不会太频繁地获取数据,所以线程将是理想的。 有没有办法让单个消费者从所有话题中消费?如果是的话,我们怎样才能做到呢?另外,Kafka将如何维护抵消?请建议答案。

  • 然而,当在我的环境中测试此示例时,我得到了一个异常。

  • 我的问题与单个消费者从多个话题消费有关。假设所有主题都加载了1M个记录,一个使用者必须处理这些记录。它将按照什么顺序从主题中读取(我的意思是首先读取哪个主题/分区,等等) Kafka内部资料的任何链接会有帮助吗?

  • 我想为几个主题创建一个kafka消费者。consumer的方法构造函数允许我在订阅中传输主题列表的参数,如下所示: 之后,我想轮询记录从Kafka流每3秒并处理它们,但我想知道什么是这个消费者-如何将不同主题的记录轮询-首先一个主题,然后另一个,或并行。会不会一个消息量大的主题会一直处理,另一个消息量小的主题会等待?

  • 我有两个组id相同的消费者服务器订阅了相同的主题。kafka服务器仅使用一个分区运行。据我所知,消息应该在这两个消费者服务器中随机使用。但现在似乎总是同一个消费者服务器A消费消息,另一个不消费消息。如果我停止消费者服务器A,另一个将正常工作。我所期望的是,他们可以随机消费信息。