从scala启动ksqlrestapplication并获取nosuchmethoderror org.apache.kafka.streams.streamsconfig.getconsumerconfigs

aamkag61  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(305)

我试图编写一个程序,使我能够在scala中对kafka主题运行预定义的ksql操作,但我不想每次都打开ksqlcli。因此,我想从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中的函数调用,并在create函数中调用了streamsconfig.getconsumerconfigs(),其中有两个字符串作为参数,而不是中定义的参数
https://kafka.apache.org/0102/javadoc/org/apache/kafka/streams/streamsconfig.html#getconsumerconfigs(streamthread,%20java.lang.string,%20java.lang.string)。
是我的ksql和kafka版本根本不兼容还是我做错了什么?我使用的是ksqlversion4.1.0-snapshot和kafka版本1.0.0。

nbysray5

nbysray51#

是的,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/

相关问题