我已经实现了一种苍鹭拓扑结构,可以从Kafka队列中读取消息。因此,我的拓扑结构具有一个kafka喷口和一个螺栓,用于计算从队列中读取的消息数。
当我说出10000
消息到kafka队列中时,我可以看到苍鹭拓扑中kafka出口中收到的所有消息,但是丢失的消息很少。
以下是苍鹭的拓扑设置
Config config = Config.newBuilder()
.setUserConfig("topology.max.spout.pending", 100000)
.setUserConfig("topology.message.timeout.secs", 100000)
.setNumContainers(1)
.setPerContainerCpu(3)
.setPerContainerRamInGigabytes(4)
.setDeliverySemantics("ATLEAST_ONCE")
.build();
任何指针都会有所帮助。
编辑:我正在使用苍鹭的streamlet API。我将计数螺栓替换为log
螺栓,但是在log
螺栓的日志中看到了相同的消息丢弃问题
processingGraphBuilder.newSource(kafkaSource)
.log();
编辑2:我通过完全删除streamlet API解决了该问题。我使用基本的喷口和螺栓API重新实现了所有功能,并开始使用喷口。这解决了问题。我猜这是由于在streamlet API中的喷口处没有确认而发生的
答案 0 :(得分:1)
当您说消息被丢弃时,您是在看到在失败计数指标中记录的失败,还是只是螺栓中的执行计数与喷嘴的发射计数不符?
在Storm兼容模式下,指标是根据样本计算的(我认为默认值为5%)。因此,计数可能会超出该范围。例如,根据对流进行采样的时间,您可以发送100个元组,并且执行计数可以是80或120。
答案 1 :(得分:1)
简单的答案:不应掉落。
几个问题: -在heronui中,喷口的总发射时间和确认时间是多少? -在heronui中,螺栓的总执行时间,确认次数和失败次数是多少?