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

时间:2019-01-16 08:59:40

标签: apache-kafka kafka-consumer-api

我正在编写kafka客户应用程序。我有一个包含4个分区的主题-1个是领导者,3个是关注者。生产者使用键来标识要推送消息的分区。 如果我编写一个使用者并在不同的节点上运行它或启动同一使用者的4个实例,那么消息消费将如何发生?是否所有4个实例都会收到相同的消息?

  1. 如果多个消费者(同一组)消费一个主题,会发生什么?
  2. 他们得到相同的数据吗?
  3. 如何管理偏移量?每个消费者都分开吗?

2 个答案:

答案 0 :(得分:2)

我建议您至少阅读Confluent关于卡夫卡的权威指南的前几章,以初步了解卡夫卡的工作原理。

我的回答很简短。请参阅本书以获取详细说明。

如何管理偏移量?每个消费者都分开吗?

取决于组ID。组仅管理一个偏移量。

如果多个消费者(同一组)消费一个主题,会发生什么?
消费者可以是多个消费者-可以由相同或不同的群体来识别所有消费者。 如果2个使用者属于同一组,则两个使用者都不会收到所有消息。

他们得到相同的数据吗?
否。发送消息并提交读取后,该组的偏移量将增加。因此,具有相同组的另一个使用者将不会收到该消息。

希望有帮助:)

答案 1 :(得分:0)

  1. 如果多个消费者(同一组)消费一个主题,会发生什么情况?
    答案:生产者根据此处的记录键将记录发送到特定分区。 Java的默认分区程序使用记录键的哈希值选择分区。当同一消费者组中有多个消费者时,每个消费者将获得不同的分区。因此,在这种情况下,只有单个使用者接收所有消息。当接收消息的使用者断开时,组协调器(集群中的代理之一)触发重新平衡,然后将该分区分配给可用的使用者之一。

  2. 它们是否获得相同的数据?
    答案::如果使用者将使用的消息提交到分区并发生故障,则如上所述,将发生重新平衡。获得此分区的使用者将不会收到消息。但是,如果使用者在提交之前失败,则获得此分区的使用者将收到消息。

  3. 如何管理偏移量?每个消费者都分开吗?
    答案:不,偏移量不是针对每个消费者的。分区永远不会一次分配给同一使用者组中的多个使用者。分配了分区的使用者,默认情况下也会获得偏移量。