Kafka存储的消息多于Produced

时间:2013-05-11 12:37:56

标签: java apache-kafka

我有一个带有以下设置的apache-kafka 0.8群集 -

1)3个经纪人全部在同一台机器上运行
2)一个主题包含10个分区和3个副本。

我有20个制作人制作一个主题。
我有10个消费者从每个分区消费。 我正在测试经纪人的安全性。

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

然而,当我通过逐个关闭经纪人来测试设置时,我发现消耗的消息数量比生成的消息数量多。

可能的原因是什么?

1 个答案:

答案 0 :(得分:1)

首先想一想:

除非每个代理都有单独的磁盘,否则强烈建议您为每个代理使用单独的计算机。这是因为每个磁盘都具有经纪人想要使用的最大I / O吞吐量,并且如果您有多个代理使用相同的磁盘,则所有代理将竞争I / O.

你带来经纪人的速度有多快?即时杀人或优雅关机?到下一个经纪人被杀多长时间?你的消息确认级别是什么?您生成邮件的速率是多少?

如果你过于缓慢地杀死一个经纪人,那么生产者可能已经向一个垂死的经纪人发送了一条消息,这个消息在一个竞争条件下可能已经复制了它,但是在生产者死亡之前它并没有向生产者发送确认。这将导致生产者认为消息未成功复制,然后它会尝试将相同的消息发送给新的领导者。新的领导者会认为重复的消息是一条新消息,因此将其添加到日志中。

这是一种竞争条件,除非在高生产率和确认水平-1,否则非常不可能。