代码之家  ›  专栏  ›  技术社区  ›  Christopher Beck

从scala启动KsqlRestApplication表单并获取NoSuchMethodError org。阿帕奇。卡夫卡。流。StreamsConfig。getConsumerConfigs

  •  1
  • Christopher Beck  · 技术社区  · 8 年前

    我试图编写一个程序,使我能够在Scala中对Kafka主题运行预定义的KSQL操作,但我不想每次都打开KSQL Cli。因此,我想从Scala程序中启动KSQL“服务器”。如果我正确理解KSQL源代码,我必须构建并启动KsqlRestApplication:

    def restServer = KsqlRestApplication.buildApplication(new 
    KsqlRestConfig(defaultServerProperties), true, new VersionCheckerAgent 
    {override def start(ksqlModuleType: KsqlModuleType, properties: 
    Properties): Unit = ???})
    

    但是,当我尝试这样做时,会出现以下错误:

    Exception in thread "main" java.lang.NoSuchMethodError: org.apache.kafka.streams.StreamsConfig.getConsumerConfigs(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Map;
    at io.confluent.ksql.rest.server.BrokerCompatibilityCheck.create(BrokerCompatibilityCheck.java:62)
    at io.confluent.ksql.rest.server.KsqlRestApplication.buildApplication(KsqlRestApplication.java:241)
    

    我查看了BrokerCompatibilityCheck中的函数调用,以及它调用StreamsConfig的create函数。getConsumerConfigs(),使用2个字符串作为参数,而不是中定义的参数

    https://kafka.apache.org/0102/javadoc/org/apache/kafka/streams/StreamsConfig.html#getConsumerConfigs(StreamThread,%20java.lang.String,%20java.lang.String)

    我的KSQL和卡夫卡版本是不兼容还是我做错了什么? 我使用的是KSQL版本4.1.0-SNAPSHOT和Kafka版本1.0.0。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Michal Borowiecki    8 年前

    是的,NoSuchMethodError通常表示库之间的版本不兼容。

    您发布的链接是针对kafka 0.10.2的javadoc。该方法在1.0中没有更改,但在即将到来的1.1中,它只需要2个字符串: https://kafka.apache.org/11/javadoc/org/apache/kafka/streams/StreamsConfig.html#getConsumerConfigs(java.lang.String,%20java.lang.String) 。这表明您正在使用的KSQL版本(4.1.0-SNAPSHOT)取决于kafka streams的1.1版本,该版本目前正处于发布候选阶段,我认为应该很快推出:

    https://lists.apache.org/thread.html/780c4458b16590e99261b69d7b41b9ec374a3226d72c8d38885a008a@%3Cusers.kafka.apache.org%3E

    根据该电子邮件,您可以在apache staging repo中找到最新的(1.1.0-rc2)工件: https://repository.apache.org/content/groups/staging/