2014-11-05 57 views
0

我正试图想出一个从Kafka消费的设计。我正在使用卡夫卡的0.8.1.1版本。我正在考虑设计一个系统,每隔几秒创建一次消费者,从卡夫卡消费数据,处理它,然后在向卡夫卡提交补偿后退出。在任何时间点,期望250-300个消费者都能活跃(在不同的机器上作为ThreadPools运行)。重新平衡Kafka中某个主题的分区的代价

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

  2. 消费者之间的分区重新平衡成本如何。我期待新消费者每隔几秒完成一次或加入同一消费群体。所以我只想知道重新平衡操作的开销和延迟。

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

+0

我在Kafka邮件列表中讨论过相同的问题。请检查邮件线程。 http://goo.gl/ImmjRf – Dinesh 2014-11-06 16:42:59

+0

你能得出结论吗? – Jayesh 2016-09-23 12:00:19

回答

2

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

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

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

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

+1

请描述您观察到100-500毫秒延迟的场景。我在卡夫卡邮件列表中讨论过这种情况,他们认为延迟可能会持续几十秒 – Dinesh 2014-11-06 16:45:36

+0

这是一个非常简单的测试,并且没有负载。基本上跑了Flume的Kafka来源,并试图阻止代理,并看到其余的时候拿起工作。 – 2014-11-06 17:24:38

相关问题