Kafka如果消费者组成员失败,消息将如何处理?

时间:2019-12-25 14:32:31

标签: apache-kafka

假设我们有一个名为Topic的主题和一个由三个消费者组成的消费者组CG。组偏移等于0。

消费者开始阅读消息。

读取顺序:

  1. 消费者1阅读消息1。
  2. 消费者2阅读消息2。
  3. 消费者3阅读消息3。
  4. 消费者2提交消息2。
  5. 消费者3提交消息3。
  6. 消费者1处理消息1失败并失败。

问题是:消息1会发生什么?

或者也许我误解了消费者,因为我是Kafka的新手,他们如何阅读消息。

版本:Apache Kafka 2.4.0

2 个答案:

答案 0 :(得分:2)

每个使用者都将分配有分区。 假设我们有6个分区:

消费者1:Partiton 1和2
消费者2:分区3和4
使用者3:分区5和6

消费者1发生故障时,消费者组将重新平衡并将空闲分区分配给其他消费者,从而为我们提供以下设置:

消费者2:分区 1 和3和4
使用者3:分区 2 和5&6

其他使用者将从该分区上最后提交的偏移量开始。

答案 1 :(得分:2)

您错过了大约partitions同一组的多个使用者将永远不会使用来自同一分区的邮件

假设您的主题具有三个分区(P0,P1,P2),并且如果您有三个消费者(C1,C2,C3)属于同一组,那么每个消费者将从每个分区开始消费

enter image description here

如果任何使用者未能提交偏移量并下降,那么它将再次开始使用先前偏移量(在您的情况下为0)中的消息

假设您的主题是5个分区(P0,P1,P2,P3,P4)和三个使用者(同一个组)(C0,C1,C3)。然后,消费者将尝试通过均分两个分区来平等地实现负载均衡 enter image description here

C1从P0和P1消耗,C2从P2和P3消耗,其余C3从P4消耗。