Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 卡夫卡:使用公共消费者组访问多个主题_Apache Kafka_Apache Kafka Connect - Fatal编程技术网

Apache kafka 卡夫卡:使用公共消费者组访问多个主题

Apache kafka 卡夫卡:使用公共消费者组访问多个主题,apache-kafka,apache-kafka-connect,Apache Kafka,Apache Kafka Connect,我们的集群运行Kafka 0.11,对使用消费群体有严格限制。我们不能使用任意消费者组,因此管理员必须创建所需的消费者组 我们运行Kafka Connect HDFS接收器从主题读取数据并写入HDFS。所有主题只有一个分区 在卡夫卡HDFS接收器中使用消费组时,可以考虑以下两种模式: 如图所示: 案例1:每个主题都有自己的消费者群体 案例2:所有主题都有一个共同的消费者群体 我知道,当一个主题有多个分区时,如果一个消费者出现故障,同一消费者组中的另一个消费者将接管该分区 我的问题: 当多个主

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

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

在卡夫卡HDFS接收器中使用消费组时,可以考虑以下两种模式:

如图所示:

案例1:每个主题都有自己的消费者群体

案例2:所有主题都有一个共同的消费者群体

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

我的问题:

当多个主题共享同一消费群体时,是否会发生同样的情况?ie:如果一个使用者(HDFS接收器)出现故障,另一个使用者(HDFS接收器连接器)会接管工作并读取该主题吗


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

绝对是。kafka使用者应该监视这两个主题,然后,kafka会将分区(每个主题)分配给使用者组的当前活动成员

无论每个主题上有一个或多个分区,只要在同一组中发生使用者故障,使用者都将负责监视每个主题的分区。
当发生故障时,Kafka将始终触发重新平衡过程,以便将分区分配给组中剩余的活动使用者,因此,工作将继续在该主题上运行

是的,只要两个使用者订阅相同的主题集(topicA和topicB),所有主题的分区都将分布在所有使用者中


在您的案例中,这意味着如果其中一个消费者失败,两个主题都将分配给幸存的消费者。

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

  • 创建了两个不同的主题T1和T2,每个主题中有两个分区
  • 创建了两个具有相同组的消费者
    xxx
  • 分配的耗电元件C1到T1,耗电元件C2到T2
  • 生成到T1的消息-只有分配给T1的消费者C1处理了这些消息
  • 向T2生成的消息-仅分配给T2的消费者C2处理了这些消息
  • 关闭耗电元件C1并重复4-5步。只有消费者C2处理来自T2的消息
  • 未处理来自T1的消息

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

    如果消费者在一个消费者组中失败,所问的问题是,同一组中可用的消费者是否会选择订阅的主题并重新开始处理?

    但是,接受的答案有这样一种情况:主题被分配给消费者,但如果其自动分配(即订阅),则组中空闲的消费者应选择失败消费者的作业,并从最后提交的偏移量开始读取。如果不是这样的话,那就是打破了消费群体并行性架构


    看看这个答案

    我的问题不是关于重新划分分区的问题,而是关于同一消费群体中不同主题的重新划分是否会发生。答案是肯定的。如果消费者在两个主题上都已注册/订阅,则当一个消费者失败时,他们将开始从另一个主题获取消息。在Kafka Connect中,每个消费者仅订阅一个特定主题。在这种情况下,不会有任何再平衡,对吗?我不使用卡夫卡连接,所以我无法回答是的,这是我预期的正确行为。我想其他人认为我的消费者同时订阅T1和T2。@Ashikaumagaumagiliya愿意接受正确的答案then@borN_free我不认为有人声称他们会看到他们不拥有的主题的记录。要完成您的实验,请尝试通过向其中一个主题添加分区来强制重新平衡,您将看到所有消费者(即使是那些不关心该主题的消费者)都停止重新平衡。在步骤1中,如果您创建的T1只有一个分区,T2还有两个分区,会发生什么?在启动卡夫卡时,C2抱怨没有足够的分区,即使T2已经足够了。你看到了吗?@borN_free你能分享一个你是如何做到的代码示例吗?我认为你在回答中混淆了主题和分区