【问题标题】:Kafka Storing more messages than ProducedKafka 存储的消息多于 Produced
【发布时间】:2013-05-06 00:25:39
【问题描述】:

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

1) 3 个代理都在同一台机器上运行
2) 一个topic,10个partition,3个replicas。

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

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

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

可能的原因是什么?

【问题讨论】:

  • 我在让 kafka 经纪人起死回生时遇到了类似的行为。我从三个 dockerized kafka 经纪人开始。比暂停一个。
    开始生成消息。取消暂停暂停的代理。 kafka 中的消息多于产生的消息。这是 acks=-1。使用 acks=1 时会丢失一些消息...

标签: java apache-kafka


【解决方案1】:

首先想到:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 2017-06-07
    • 1970-01-01
    • 2019-06-21
    • 2019-06-08
    • 1970-01-01
    相关资源
    最近更新 更多