1

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

1) 3 个代理都在同一台机器上运行
2) 一个具有 10 个分区和 3 个副本的主题。

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

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

但是,当我通过逐个关闭代理来测试设置时,我观察到正在消耗的消息数量多于产生的消息数量。

可能的原因是什么?

4

1 回答 1

1

首先是一个想法:

除非您为每个代理使用单独的磁盘,否则强烈建议您为每个代理使用单独的机器。这是因为每个磁盘都有代理想要利用的最大 I/O 吞吐量,如果您有多个代理使用同一个磁盘,所有代理将竞争 I/O。

你让经纪人失望的速度有多快?即时杀戮还是优雅关机?距离下一个经纪人被杀还有多长时间?您的消息确认级别是多少?您生成消息的速率是多少?

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

这是一种竞争条件,除非在高生产率和确认级别 -1 下,否则不太可能发生。

于 2014-01-24T22:38:43.807 回答