我们的集群运行kafka 0.11,对使用使用者组有严格的限制。我们不能使用任意使用者组,因此管理员必须创建所需的使用者组。
我们运行kafka connect hdfs sinks从主题读取数据并写入hdfs。所有主题只有一个分区。
在kafka hdfs sink中使用消费者组时,我可以考虑以下两种模式。
如图所示:
案例1:每个主题都有自己的消费群体
案例二:所有主题都有一个共同的消费群体
我知道,当一个主题有多个分区时,如果一个使用者失败,同一使用者组中的另一个使用者将接管该分区。
我的问题是:
当多个主题共享同一个消费群体时,会发生同样的情况吗?ie:如果一个使用者(hdfs接收器)失败,另一个使用者(hdfs接收器连接器)是否会接管工作并阅读该主题?
更新:每个kafka hdfs接收器连接器只订阅一个主题。
4条答案
按热度按时间sirbozc51#
是的,只要两个使用者都订阅相同的主题集(topica和topicb),所有主题的分区就会分布在所有使用者之间。
在您的案例中,这意味着如果其中一个使用者失败,两个主题都将分配给幸存的使用者。
fquxozlt2#
当然可以。kafka使用者应该监视这两个主题,然后,kafka将分区(每个主题)分配给使用者组的当前活动成员。
无论每个主题上有一个或多个分区,只要同一组中发生使用者故障,使用者都将负责监视每个主题的分区。当发生故障时,kafka总是会触发重新平衡过程,以便将分区分配给组中剩余的活动使用者,因此,工作将继续在该主题上运行。
zbwhf8kr3#
我很惊讶所有回答“是”的都是错的。我只是测试了一下
group.id
对于不同主题的消费者来说效果很好,并不意味着他们共享信息,因为对于Kafka来说关键是(topic, group)
而不仅仅是(group)
. 以下是我所做的:创建了两个不同的主题t1和t2,每个主题有两个分区
使用同一组创建了2个消费者 `` 将耗电元件c1分配给t1,将耗电元件c2分配给t2
向t1生成的消息—只有分配给t1的使用者c1处理了这些消息
向t2生成的消息—只有分配给t2的使用者c2处理了这些消息
杀死消费者c1并重复4-5步。只有使用者c2处理来自t2的消息
未处理来自t1的消息
结论:相同组名的用户订阅了不同的主题,不会使用其他主题的消息,因为关键是
(topic, group)
ttygqcqt4#
问题是,如果某个用户组中的用户失败,同一组中可用的用户是否会选择订阅的主题并重新开始处理?。
但是,公认的答案有这样一种情况:主题被分配给消费者,但是如果其自动分配(即订阅),那么组中空闲的消费者应该选择失败消费者的作业,并从最后提交的偏移量开始读取。如果不是这样的话,那就是打破了消费者群体的并行架构。
看看这个答案。Kafka多主题消费