【问题标题】:Does Kafka supports different consumers reads the same partition with different offsets?Kafka 是否支持不同的消费者读取不同偏移量的同一个分区?
【发布时间】:2020-06-15 16:00:22
【问题描述】:

Kafka 是否支持不同的消费者以不同的偏移量读取同一个分区?

一个分区:

              |------------Consumer 2, offset 2
+---+---+---+---+----+
| 0 | 1 | 2 | 3 | .. |  <---- a particular partition
+---+---+---+---+----+
  |______Consumer 1, offset 1

Is it possible?

更新(来自官方 Kafka):

【问题讨论】:

    标签: apache-kafka kafka-consumer-api kafka-partition


    【解决方案1】:

    当然。从图片中可以看出C1C3 正在消耗P0。也许C1 读取了 10 条消息,C3 读取了 5 条消息。唯一重要的是 C1C3 不在同一个消费者组中。来自同一组的两个消费者不能消费同一个分区。

    【讨论】:

    • 偏移量怎么样?读取同一分区的不同组消费者是否使用不同的偏移量?偏移量存储在哪里?如果另一个组消费者加入他们,是否会创建第三个偏移量?如果消费者将在中途完成阅读(顺便说一句,消费者如何告诉 kafka 它完成了?)偏移量是否会被删除?
    • 是的,提交的偏移量存储在每个分区上的每个消费者 GROUP 上。因此,单个消费者可以来来去去,在这种情况下会发生重新平衡,并且无论组中的哪个消费者选择分区,他们都会从该偏移量开始。这些偏移量存储在一个特殊的主题上 - 如果您使用控制台客户端列出所有主题,您可以看到它的详细信息。
    【解决方案2】:

    不,对于主题中的分区,一次只有一个消费者可以读取该分区。一旦这些消息被读取,分配该主题的下一个消费者将读取下一个尚未提交的偏移量。

    您可以使用--from-beginning 配置消费者,以便下一个消费者可以读取该分区中的所有消息。

    【讨论】:

    • 您的回答是否重点:“这是可能的,但不是同时”?
    • 是的。 @J.J.Beam 这不能同时发生。
    • 知道了,谢谢。那么消费者如何才能“完成”消费呢?
    • 当所有产生的消息都被消费者读取时,或者基本上当消费者停止消费任何消息时。
    • 关于消费者停止,通常消费者应用程序只是循环消费和处理。但是,如果消费者在一定时间内没有轮询(默认为 5 分钟),则假定它已经消失,并且其分区将重新分配给组中的剩余消费者。这有时可能只是因为消费者处理批处理速度很慢,这就是为什么 Kafka 通常坚持“至少一次”语义。此外,还有一个后台心跳线程。如果消费者停止并因此该线程死亡,则重新平衡会在较短的时间后发生
    猜你喜欢
    • 2021-10-26
    • 2022-11-19
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2021-05-01
    相关资源
    最近更新 更多