尝试将 Flink 1.9 SQL-Client 与 Kafka 一起使用,但没有成功。 在弄清楚所需的 jar 文件并将它们复制到 lib 目录中后,我在执行 SELECT * FROM 表名时出现以下运行时异常:
Flink SQL> select * from default_catalog.default_database.member_customer_newsletters ;
[ERROR] Could not execute SQL statement. Reason:
java.lang.ClassNotFoundException: org.apache.kafka.clients.consumer.ConsumerRecord
做jar文件的jar -tf,我可以看到类ConsumerRecord在那里:
jar -tf ./lib/flink-sql-connector-kafka-0.11_2.12-1.9.0.jar|grep 'ConsumerRecord'
org/apache/flink/kafka011/shaded/org/apache/kafka/clients/consumer/ConsumerRecord.class
所以,我不确定为什么它会占用 ClassNotFoundException,因为该类已经在 jar 文件中?
我只需要添加运行时正在寻找"org.apache.kafka.clients.consumer.ConsumerRecord",但由于此jar文件是阴影的,因此该类的完整限定名称是"org.apache.flink.kafka011.shaded.org.apache.kafka.clients.consumer.ConsumerRecord.class">
但是,这个阴影罐子里的任何其他类也应该如此!
有两个不同的类:
org.apache.kafka.clients.consumer.ConsumerRecord
org.apache.flink.kafka011.shaded.org.apache.kafka.clients.consumer.ConsumerRecord
在flink-sql-connector-kafka-0.11_2.12-1.9.0.jar
,你找到了类
org.apache.flink.kafka011.shaded.org.apache.kafka.clients.consumer.ConsumerRecord
而 Flink 则抱怨:
org.apache.kafka.clients.consumer.ConsumerRecord
第一个是 Flink 内部使用的类,在 Kafka 的一种复制粘贴之后。
第二个是kafka-clients-0.11.0.2.jar
中的一堂课。
所以 Flink 抱怨缺少一个库是对的。