【问题标题】:Getting NoSuchMethodError in Kafka Consumer v0.10.0.1在 Kafka Consumer v0.10.0.1 中获取 NoSuchMethodError
【发布时间】:2016-10-10 20:34:25
【问题描述】:

我正在尝试从 0.9.0.0 迁移到 KafkaClient 0.10.0.1。该代码在 0.9.0.0 的生产环境中运行良好。现在,当消费者以以下异常启动时,开发平台中的相同代码会引发异常 javax.servlet.ServletException: java.lang.NoSuchMethodError: org/apache/kafka/clients/consumer/KafkaConsumer.subscribe(Ljava/util/List;)V(从文件加载:/home/vcap/app/wlp/usr/ shared/config/lib/global/kafka-clients-0.10.0.1.jar by com.ibm.ws.classloading.internal.AppClassLoader@7a0d5027)从类 com.ibm.b2b.msghub.helper.AbstractB2BConsumer 调用(从文件加载:/home/vcap/app/wlp/usr/shared/config/lib/global/B2BBlueMixLib-1.0.jar by com.ibm.ws.classloading.internal.AppClassLoader@7a0d5027)。

马杜

【问题讨论】:

    标签: websphere-liberty kafka-consumer-api message-hub


    【解决方案1】:

    客户端 API 在 Kafka 0.9 和 0.10 之间略有变化。

    KafkaConsumer.subscribe() 的定义发生了变化。第一个参数现在是 Collection 类型而不是 List。

    这样做是为了使 API 更加一致,因为现在大多数(全部?)调用都采用 Collection 对象,而之前它是多种类型的混合。

    【讨论】:

    • 感谢 Mickael 的回复。我尝试将列表转换为 Collection。那没起效。所以我使用了使用 Pattern 对象的订阅方法。我在为方法 onPartitionsAssigned Collection cur = Arrays.asList(partition); 实现 kafkaConsumer.seekToEnd 的 ConsumerRebalanceListener 面临同样的问题kafkaConsumer.seekToEnd(cur);
    • 对于上面的代码我得到编译错误:[ERROR] required: org.apache.kafka.common.TopicPartition[] [ERROR] found: java.util.Collection [ERROR] 原因:可变参数不匹配; java.util.Collection 无法转换为 org.apache.kafka.common.TopicPartition
    • 一个列表已经是一个集合,所以不需要强制转换。它看起来更像是一个依赖问题。要么您构建的 Kafka 级别错误,要么您的应用服务器上的 Jar 版本错误。与 seekToEnd() 相同。它现在需要一个集合。但从您的输出看来,它期待旧类型(TopicPartition varargs)!
    猜你喜欢
    • 2017-05-14
    • 1970-01-01
    • 2023-03-02
    • 2020-12-14
    • 1970-01-01
    • 2019-12-07
    • 2015-08-24
    • 2016-03-28
    • 1970-01-01
    相关资源
    最近更新 更多