【问题标题】:Kafka Spout read twice message on Storm TopologyKafka Spout 在 Storm Topology 上阅读了两次消息
【发布时间】: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


【解决方案1】:

配置看起来不错。

也许问题是双重确认。确保您只在 execute 中对每个元组进行一次确认。

正如评论中提到的,请考虑升级到更新的 Kafka 版本,以及切换到 storm-kafka-client

还有一些可以让您的生活更轻松的事情:考虑扩展 BaseBasicBolt 而不是 BaseRichBolt。如果运行execute 不会引发错误,BaseBasicBolt 会自动为您确认元组。如果你想让一个元组失败,你可以抛出FailedExceptionBaseRichBolt 应该只在你想做更复杂的 acking 时使用,例如在确认之前从内存中的许多 execute 调用中聚合元组。

【讨论】:

  • 我注意到消费速度大大降低了 4 倍!比上一个要慢。是否有任何特定选项可以更快地检索消息?
  • 从上面引用我自己的话:“最后,您可能想知道 issues.apache.org/jira/browse/STORM-3102,直到 Storm 1.2.3(我们预计很快就会发布) Kafka 2.0.0 存在性能问题”。您需要升级到storm-kafka-client 1.2.3。如果你不想等待发布,你可以自己下载和构建 Storm,或者在repository.apache.org/content/repositories/orgapachestorm-1081/…获取jar
  • 对不起,您必须发布两次答案。我尝试下载 jar 并将其放入我的 intellij 项目 jar 中,但是当我开始拓扑时,我得到了 Caused by: java.lang.ClassNotFoundException: com.google.common.base.Supplier 的异常
  • 您想要做的是将 POM 中 storm-kafka-client 的版本设置为 1.2.3。然后在repository.apache.org/content/repositories/orgapachestorm-1081 下载“org”目录并将其放入您的本地Maven 存储库(很可能在您的用户目录~/.m2/repository 中)。这应该让 IntelliJ/Maven 拿起罐子。
  • 您也可以将repository.apache.org/content/repositories/orgapachestorm-1081 URL 作为存储库添加到您的POM,如maven.apache.org/guides/mini/guide-multiple-repositories.html 所述,这可能更容易。
猜你喜欢
  • 2017-02-23
  • 2015-04-20
  • 2015-07-30
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 2013-06-24
  • 2015-03-13
相关资源
最近更新 更多