在Kafka中重新平衡主题分区的成本

时间:2014-11-05 12:54:31

标签: apache-kafka

我正在努力想出一个从Kafka消费的设计。我使用的是Kafka的0.8.1.1版本。我正在考虑设计一个系统,每隔几秒就会创建一个消费者,消耗来自Kafka的数据,处理它然后在向Kafka提交偏移后退出。在任何时候都希望250-300名消费者处于活跃状态(在不同的机器上作为ThreadPools运行)。

  1. 如何以及何时发生分区重新平衡?

  2. 消费者对分区的重新平衡成本有多高。我期待一个新的消费者每隔几秒就完成或加入同一个消费者群体。所以我只想知道重新平衡操作的开销和延迟。

  3. 假设消费者C1具有分配给它的分区P1,P2,P3并且它正在处理来自分区P1的消息M1。现在消费者C2加入了这个群体。分区如何在C1和C2之间划分。是否有可能C1(可能需要一些时间将其消息提交给Kafka)承诺M1将被拒绝,M1将被视为新消息并将被传递给其他人(我知道Kafka至少一次交付模型,但想确认重新划分是否会导致重新传递相同的消息)?

1 个答案:

答案 0 :(得分:2)

如果我是你,我会重新考虑设计。也许您需要一个消费者池?

  1. 每次消费者加入或离开小组时都会发生重新平衡。

  2. Kafka和当前的消费者绝对是为长期消费者设计的。新的消费者设计(计划为0.9)将更好地处理短期消费者。根据我的经验,重新平衡需要100-500毫秒,这取决于ZooKeeper的工作方式。

  3. 是的,在重新平衡期间经常会发生重复。这就是为什么我们试图避免它们。您可以尝试通过更频繁地提交偏移来解决这个问题,但有300名消费者经常提交并且很多消费者加入和离开 - 您的Zookeeper可能会成为瓶颈。