喷嘴和螺栓之间的消息掉落

时间:2018-11-07 01:19:20

标签: apache-kafka apache-storm heron

我已经实现了一种苍鹭拓扑结构,可以从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中的喷口处没有确认而发生的

2 个答案:

答案 0 :(得分:1)

当您说消息被丢弃时,您是在看到在失败计数指标中记录的失败,还是只是螺栓中的执行计数与喷嘴的发射计数不符?

在Storm兼容模式下,指标是根据样本计算的(我认为默认值为5%)。因此,计数可能会超出该范围。例如,根据对流进行采样的时间,您可以发送100个元组,并且执行计数可以是80或120。

答案 1 :(得分:1)

简单的答案:不应掉落。

几个问题: -在heronui中,喷口的总发射时间和确认时间是多少? -在heronui中,螺栓的总执行时间,确认次数和失败次数是多少?