来自不同消费者组的多个消费者如何从同一分区读取?

时间:2020-03-06 07:06:11

标签: apache-kafka kafka-consumer-api

我有一个用例,其中我在不同的消费者组(cg1和cg2)中有2个消费者订阅了具有4个分区的同一主题(主题A)。 如果两个使用者都从同一个分区读取数据,其中一个失败,而另一个提交了偏移,会发生什么情况?

3 个答案:

答案 0 :(得分:1)

在Kafka中,偏移管理由每个分区的消费组完成。

如果您有两个使用同一主题的使用者组,甚至对一个使用者组的提交进行分区,将不会对另一个使用者组产生任何影响。消费者群体完全脱节。

答案 1 :(得分:1)

使用者组中的一个使用者可以从单个主题分区中读取数据。一个使用者无法从一个主题的多个分区读取数据。

示例:消费者组1的消费者1只能读取单个主题分区的数据。

补偿管理由动物园管理员完成。

__ consumer_offsets :每个使用者组都按主题分区维护其偏移量。从v0.9开始,每个消费者组的已提交偏移量信息都存储在此内部主题中(在v0.9之前,此信息存储在Zookeeper中)。

当偏移量管理器收到OffsetCommitRequest时,它将请求附加到名为__consumer_offsets的特殊压缩的Kafka主题。最后,仅当offsets主题的所有副本都接收到偏移量时,偏移量管理器才会向消费者发送成功的偏移量提交响应。

enter image description here

答案 2 :(得分:0)

同时来自两个不同消费者组(cg1和cg2)的两个消费者可以读取同一主题的数据。

在卡夫卡1:抵销管理由动物园管理员负责。

在kafka 2中:每个使用者的偏移量都存储在__Consumer_offsets主题中

偏移量用于跟踪消费者(消费者消耗了多少记录),假设消费者1消耗10条记录,消费者2消耗20条记录,而消费者1突然死掉,此时消费者1将然后它将从第11条记录开始读取。