多个消费者组消费者如何跨分区工作 Kafka 中的同一主题?

Ami*_*thi 6 bigdata apache-kafka

我正在阅读这个 SO answer和许多这样的博客。

我知道的:

当使用多个消费者组 id 运行多个消费者时,多个消费者可以在单个分区上运行,并且只有一个消费者组中的一个消费者可以在给定时间从分区中消费。

我的问题是有关多个消费者多消费群体从消费同一主题

  1. 如果多个消费者(不同组)消费一个主题(最终是同一个分区)会发生什么?

  2. 他们得到相同的数据吗?

  3. 如何管理偏移?每个消费者都是分开的吗?

  4. (可能基于意见)您或通常推荐的方法是如何处理在单个分区上运行的单独组的两个消费者之间的重叠数据?

编辑:“重叠数据”:表示在同一分区上操作的不同消费者组的两个消费者获得相同的数据。

Han*_*sen 8

  1. 是的,他们得到相同的数据。Kafka 只在主题分区的提交日志中存储一份数据副本。如果消费者不在同一个组中,那么他们每个人都可以使用来自客户端消费者库的 fetch 请求来获取相同的数据。每个组成员将获得哪些分区的分配由每个组的主要消费者管理。此处记录了详细步骤的整个过程https://community.hortonworks.com/articles/72378/understanding-kafka-consumer-partition-assignment.html

  2. 偏移量由消费者“管理”,但“存储”在 Kafka 代理的特殊 __consumer_offsets 主题中。

  3. 为每个(consumer group, topic, partition)元组存储偏移量。当向 __consumer_offsets 主题发布偏移量时,此组合也用作键,以便日志压缩可以删除旧的不需要的偏移量提交消息,并且同一(consumer group, topic, partition)元组的所有偏移量都存储在 __consumer_offsets 主题的同一分区中(默认为 50分区)