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

时间:2017-07-18 19:25:10

标签: apache-kafka bigdata

我正在阅读this SO answer和许多此类博客。

我所知道的:

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

我的问题与来自多个消费者群体多个消费者群体有关相同主题

  1. 在多个消费者(不同的群体)消费单个主题(最终是同一个分区)的情况下会发生什么?

  2. 他们是否获得相同的数据?

  3. 如何管理偏移量?每个消费者都是独立的吗?

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

  5. 编辑: "重叠数据":表示在同一分区上运行的单独消费者群体的两个消费者获得相同的数据。

2 个答案:

答案 0 :(得分:3)

  1. 是的,他们得到的数据相同。 Kafka只在主题分区中存储一份数据副本。提交日志。如果消费者不在同一个群组中,那么他们每个人都可以使用来自客户端的抓取请求来获取相同的数据。消费者库。每个组成员将获得哪些分区的分配由每个组的主要消费者管理。详细步骤的整个过程记录在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个分区)

答案 1 :(得分:1)

  1. 每个消费者群体都会从订阅的主题中获取所有消息。
  2. 偏移量由分区存储。例如,假设您有一个包含2个分区的主题,以及一个名为cg的消费者组,由2个消费者组成。在这种情况下,Kafka为每个消费者分配一个分区。然后,消费者从Kafka获取分配给它们的分区的偏移量(例如,消费者'询问'Kafka:“消费者群体cg分区1的此主题的偏移量是多少”,或者另一个消费者的分区2)。在获得正确的偏移量后,消费者会轮询一些Kafka代理以获取该分区中的下一条消息。
  3. 我不完全确定重叠数据是什么意思,你能澄清一下还是举个例子?