2013-05-11 127 views
1

我有一个Apache-卡夫卡0.8簇与下面的设置 -卡夫卡存储多个消息比生产

1)3个经纪人同一机器
2)与10个分区和3个副本的一个主题的所有运行。

我有20个生产者生产一个主题。
我有10个消费者从每个分区消费。 我正在测试经纪人的失败安全。

当所有代理启动并运行时,消耗的消息数等于生成的消息数。

但是,当我通过一次一个地关闭代理来测试安装时,我观察到消息数量比生产消耗的多。

可能的原因是什么?

+0

我经历类似的行为,同时使卡夫卡经纪人恢复生机。我从三个码头化的卡夫卡经纪人开始。比暂停一个。
开始生产消息。取消暂停的代理。卡夫卡的信息比制作的要多。这与acks = -1。当使用acks = 1时,有一些消息丢失...... – 2016-02-25 13:27:56

回答

0

首先一个念头:

除非你有各家券商不同的磁盘上,强烈建议您使用单独的机器每个经纪人。这是因为每个磁盘都具有代理商希望使用的最大I/O吞吐量,并且如果您有多个代理使用相同的磁盘,则所有代理都将竞争I/O。

您的经纪商下跌速度有多快?即时杀死或优雅关机?直到下一个经纪人遇害多少时间?什么是您的消息确认级别?你制作信息的速度是多少?

如果你杀死一个代理的速度太慢,那么生产者可能已经向临死的代理发送了一条消息,这个消息在竞争条件下可能已经被复制,但是它在生产者死亡之前不会发送确认。这会导致生产者认为该消息未被成功复制,然后它会尝试将相同的消息发送给新领导。新的领导者会认为重复的消息是一条新消息,因此将其添加到日志中。

这是一种竞争条件,除非在高生产率和确认等级-1的情况下,这是非常不可能的。