Apache kafka 卡夫卡:使用公共消费者组访问多个主题
我们的集群运行Kafka 0.11,对使用消费群体有严格限制。我们不能使用任意消费者组,因此管理员必须创建所需的消费者组 我们运行Kafka Connect HDFS接收器从主题读取数据并写入HDFS。所有主题只有一个分区Apache kafka 卡夫卡:使用公共消费者组访问多个主题,apache-kafka,apache-kafka-connect,Apache Kafka,Apache Kafka Connect,我们的集群运行Kafka 0.11,对使用消费群体有严格限制。我们不能使用任意消费者组,因此管理员必须创建所需的消费者组 我们运行Kafka Connect HDFS接收器从主题读取数据并写入HDFS。所有主题只有一个分区 在卡夫卡HDFS接收器中使用消费组时,可以考虑以下两种模式: 如图所示: 案例1:每个主题都有自己的消费者群体 案例2:所有主题都有一个共同的消费者群体 我知道,当一个主题有多个分区时,如果一个消费者出现故障,同一消费者组中的另一个消费者将接管该分区 我的问题: 当多个主
在卡夫卡HDFS接收器中使用消费组时,可以考虑以下两种模式:
如图所示: 案例1:每个主题都有自己的消费者群体 案例2:所有主题都有一个共同的消费者群体 我知道,当一个主题有多个分区时,如果一个消费者出现故障,同一消费者组中的另一个消费者将接管该分区 我的问题: 当多个主题共享同一消费群体时,是否会发生同样的情况?ie:如果一个使用者(HDFS接收器)出现故障,另一个使用者(HDFS接收器连接器)会接管工作并读取该主题吗更新:每个卡夫卡HDFS接收器连接器只订阅了一个主题。绝对是。kafka使用者应该监视这两个主题,然后,kafka会将分区(每个主题)分配给使用者组的当前活动成员 无论每个主题上有一个或多个分区,只要在同一组中发生使用者故障,使用者都将负责监视每个主题的分区。
当发生故障时,Kafka将始终触发重新平衡过程,以便将分区分配给组中剩余的活动使用者,因此,工作将继续在该主题上运行 是的,只要两个使用者订阅相同的主题集(topicA和topicB),所有主题的分区都将分布在所有使用者中
在您的案例中,这意味着如果其中一个消费者失败,两个主题都将分配给幸存的消费者。我很惊讶所有回答“是”的答案都是错误的。我刚刚测试了它,为不同主题的消费者提供了相同的
组。id
效果很好,并不意味着他们共享消息,因为对于卡夫卡来说,关键是(主题,组)
,而不仅仅是(组)
。以下是我所做的:
xxx
结论:使用相同组名订阅不同主题的消费者不会使用其他主题的消息,因为关键是
(主题,组)
如果消费者在一个消费者组中失败,所问的问题是,同一组中可用的消费者是否会选择订阅的主题并重新开始处理?
但是,接受的答案有这样一种情况:主题被分配给消费者,但如果其自动分配(即订阅),则组中空闲的消费者应选择失败消费者的作业,并从最后提交的偏移量开始读取。如果不是这样的话,那就是打破了消费群体并行性架构
看看这个答案 我的问题不是关于重新划分分区的问题,而是关于同一消费群体中不同主题的重新划分是否会发生。答案是肯定的。如果消费者在两个主题上都已注册/订阅,则当一个消费者失败时,他们将开始从另一个主题获取消息。在Kafka Connect中,每个消费者仅订阅一个特定主题。在这种情况下,不会有任何再平衡,对吗?我不使用卡夫卡连接,所以我无法回答是的,这是我预期的正确行为。我想其他人认为我的消费者同时订阅T1和T2。@Ashikaumagaumagiliya愿意接受正确的答案then@borN_free我不认为有人声称他们会看到他们不拥有的主题的记录。要完成您的实验,请尝试通过向其中一个主题添加分区来强制重新平衡,您将看到所有消费者(即使是那些不关心该主题的消费者)都停止重新平衡。在步骤1中,如果您创建的T1只有一个分区,T2还有两个分区,会发生什么?在启动卡夫卡时,C2抱怨没有足够的分区,即使T2已经足够了。你看到了吗?@borN_free你能分享一个你是如何做到的代码示例吗?我认为你在回答中混淆了主题和分区