【发布时间】:2019-10-11 04:20:23
【问题描述】:
我正在尝试使用 Kafka 到 Storm 来模拟流流量。我使用 KafkaSpout 读取来自生产者发送的一个主题的消息,该生产者读取这些推文并将它们发送到一个主题。我的问题是,在拓扑消耗完该主题中发送的所有推文后,它会继续读取该主题中的消息两次。如何阻止 KafkaSpout 读取两次?(复制因子设置为 1)
【问题讨论】:
-
首先,请确保您使用的是最新的 Storm 版本。如果还是不行,请贴出你的拓扑配置(拓扑布线,也可能是 pom.xml)。
-
感谢您的回复。我用这些信息编辑我的帖子。
-
您也可以发布您的 spout 配置吗?注意到您可能想要更改的其他一些事情:storm-core 的范围应该是“提供”,而不是“编译”。在 Classifier.execute 中,如果发生异常,您最终可以对元组进行两次确认。你需要确保只确认一次元组,否则 Storm 会认为它失败并重放它。最后考虑升级到
storm-kafka-client以及新的Kafka 版本。 0.8.2.2 已经很旧了,storm-kafka已被弃用以移除。 -
好的,谢谢,我认为错误之一是两次确认!我尝试迁移到storm-kafka-client,但似乎无法从主题中读取数据。我用 kafkaSpoutCreator 更新了我的第一篇文章及其配置。真的感谢你的帮助,我实际上是这些框架的新手。
-
是的,它无法读取数据,因为 Kafka 太旧了。
storm-kafka-client需要 Kafka 0.10.1.0(据我所知)。但是如果你愿意,你可以继续使用storm-kafka,只是想确保你知道它会在 Storm 2.0.0 中被删除。storm-kafka在 2.0.0 之后也不兼容 Kafka。
标签: java apache-kafka stream apache-storm