如果多个使用者在同一使用者组下运行,使用者是否从副本分区消费?

1l5u6lss  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(254)

我正在写一个Kafka消费应用程序。我有一个有4个分区的主题-1是leader,3是followers。生产者使用密钥标识一个分区来推送消息。如果我编写一个消费者并在不同的节点上运行它,或者启动同一消费者的4个示例,那么消息消费将如何发生?是否所有4个示例都将获得相同的消息?
如果多个消费者(同一组)消费一个主题,会发生什么情况?
他们得到相同的数据吗?
如何管理补偿?对每个消费者都是单独的吗?

yhqotfr8

yhqotfr81#

如果多个消费者(同一组)消费一个主题,会发生什么情况?
答:生产者根据此处记录的键将记录发送到特定分区。java的默认分区器使用记录键的散列来选择分区。当同一消费者组中有多个消费者时,每个消费者得到不同的分区。因此,在本例中,只有一个使用者接收所有消息。当接收消息的使用者停机时,组协调器(集群中的一个代理)触发重新平衡,然后将该分区分配给一个可用使用者。
他们得到相同的数据吗?
答:如果使用者将已消费的消息提交到分区并关闭,那么如上所述,就会发生重新平衡。获取此分区的使用者将不会获取消息。但是如果消费者在提交它的分区之前关闭了它,那么获得这个分区的消费者将获得消息。
如何管理补偿?对每个消费者都是单独的吗?
答:不,补偿不是针对每个消费者的。分区不会一次分配给同一使用者组中的多个使用者。默认情况下,分配分区的使用者也会获得偏移量。

goqiplq2

goqiplq22#

我建议你至少阅读confluent的《Kafka权威指南》的前几章,初步了解Kafka的工作原理。
我的回答一直很简短。详细解释请参阅这本书。
如何管理补偿?对每个消费者都是单独的吗?
取决于组id。一个组只管理一个偏移量。
如果多个消费者(同一组)消费一个主题,会发生什么情况?
消费者可以是多个-所有的消费者都可以被相同或不同的群体所识别。如果两个消费者属于同一组,则两个消费者都不会收到所有消息。
他们得到相同的数据吗?
否。一旦发送消息并提交读取,该组的偏移量就会增加。因此,具有相同组的不同消费者将不会收到该消息。
希望有帮助:)

相关问题