【发布时间】:2016-07-11 14:55:42
【问题描述】:
我正在使用 kafka-storm 连接 kafka 和storm。我有 3 台服务器运行 zookeeper、kafka 和storm。 kafka 中有一个主题“测试”,它有 9 个分区。
在storm topology中,KafkaSpout executor的数量是9,默认情况下,task的数量也应该是9。 'extract' bolt 是唯一连接到 KafkaSpout 的 bolt,即 'log' spout。
从 UI 来看,spout 的失败率很高。但是,bolt中执行的消息数=发出的消息数-bolt中失败的消息数。当失败消息一开始为空时,这个等式几乎匹配。
根据我的理解,这意味着螺栓确实收到了来自 spout 的消息,但 ack 信号在飞行中被暂停。这就是 spout 中的 ack 数量如此之少的原因。
这个问题可以通过增加超时秒数和 spout 待处理消息数来解决。但这会导致更多的内存使用,我不能将它增加到无限。
如果有一种方法可以强制风暴忽略某些 spout/bolt 中的 ack,我正在徘徊,这样它就不会等待该信号直到超时。这应该会显着增加吞吐量,但不能保证消息处理。
【问题讨论】:
标签: apache-storm