有没有办法从螺栓内获取 spout msgId?

Is there a way to get the spout msgId from within a bolt?

Spout内部有msgId,用于ack和fail,问题是我可以从bolts中获取这个msgId吗?

不,您只能获取此螺栓处理的元组的 msgid。

如果您想获取 spout 发出的 source msgid,您必须将 id 与消息一起发出。

我认为您不需要消息 ID。如果您使用的是 storm-kafka,则可以使用以下方案来获取作为元组 https://github.com/apache/storm/blob/master/external/storm-kafka/src/jvm/org/apache/storm/kafka/StringMessageAndMetadataScheme.java 的一部分发出的分区和偏移量。您可以将其设置为 SpoutConfig 的一部分。

如果您使用的是 storm-kafka-client,它会默认发出此信息 https://github.com/apache/storm/blob/master/external/storm-kafka-client/src/main/java/org/apache/storm/kafka/spout/DefaultRecordTranslator.java