【问题标题】:Getting ClassNotFoundException by using new Kafka Version 2.1.0 with Apache Storm 1.2.2 in Kafka Spout通过在 Kafka Spout 中使用新的 Kafka 版本 2.1.0 和 Apache Storm 1.2.2 来获取 ClassNotFoundException
【发布时间】:2019-07-01 18:58:00
【问题描述】:

在使用 Kafka Spout 启动拓扑时,使用新的 Kafka 版本 2.1.0 和 Storm 版本 1.2.2 获取 java.lang.ClassNotFoundException: kafka.api.OffsetRequest。当我使用 Kafka 版本 0.10.0.1 时,我没有得到这个。你们能帮忙吗,因为我想使用最新的 Kafka 版本?

我已经尝试了所有从 2.* 开始的最新 kafka 版本。但它不起作用。原因是:java.lang.ClassNotFoundException: kafka.api.OffsetRequest

【问题讨论】:

  • 发布您的 pom.xml(依赖项部分),我们会更轻松地为您提供帮助。

标签: apache-kafka apache-storm


【解决方案1】:

kafka.api 是旧的 Scala 类。 Many of these were removed in Kafka 2.x

这些类中的大多数已移至org.apache.kafka.common.requests,还有ListOffsetRequestOffsetFetchRequest,因此不确定您要使用哪个。

如果 Storm 本身依赖于这些旧的 API,那么你就绑定到那些,你自己的处理器不能使用新的 API。

另外,Kafka 服务器版本本身仅支持这些新请求类的某些 API 调用。

【讨论】:

  • 这些是我正在使用的拓扑配置中的类 className: "org.apache.storm.kafka.StringScheme" className: "org.apache.storm.spout.SchemeAsMultiScheme" className: "org. apache.storm.kafka.ZkHosts" className: "org.apache.storm.kafka.SpoutConfig"
【解决方案2】:

除了this answer,我怀疑您正在使用storm-kafka 库进行 Kafka 集成。您需要迁移到基于新 Kafka API 的 storm-kafka-client。新模块的文档可以在here找到。

如果您需要从storm-kafka 迁移已提交的偏移量,您可以使用https://github.com/apache/storm/tree/master/external/storm-kafka-migration 的实用程序。它可以让您迁移而无需重新开始您的 Kafka 分区。

【讨论】:

  • 更改为 Storm Kafka 客户端后,我现在收到此错误 java.lang.ClassNotFoundException: org.apache.storm.kafka.StringScheme,同时使用通量 yml 文件启动拓扑
  • 您是否更新了拓扑代码以使用新的 KafkaSpout? storm-kafka-client 是一个新库,您需要重写配置才能使用新的 API。 StringScheme 仅存在于storm-kafkagithub.com/apache/storm/blob/master/docs/… 的新配置映射表可能会有所帮助。
猜你喜欢
  • 2020-05-01
  • 2018-09-19
  • 2013-06-24
  • 2015-03-13
  • 2018-11-03
  • 2019-03-14
  • 2016-11-12
  • 2019-05-04
  • 2019-09-04
相关资源
最近更新 更多