При попытке прочитать из Kafka topi c, закодированного в Avro, Flink выдает ошибку NoSuchMethodError:
./bin/sql-client.sh embedded -e environment.yml -l /opt/flink-1.10.0/library
[...]
Flink SQL> select * from VideoLabeled limit 10;
[ERROR] Could not execute SQL statement. Reason:
java.lang.NoSuchMethodError: org.apache.flink.streaming.connectors.kafka.internals.metrics.KafkaMetricWrapper.<init>(Lorg/apache/kafka/common/Metric;)V
Это банки, которые я добавил в /opt/flink-1.10.0/library
:
avro-1.9.1.jar
flink-avro-1.10.0.jar
flink-avro-1.10.0-sql-jar.jar
flink-cep_2.12-1.10.0.jar
flink-connector-kafka_2.12-1.10.0.jar
flink-sql-connector-kafka_2.12-1.10.0.jar
flink-table-common-1.10.0.jar
jackson-annotations-2.10.3.jar
jackson-core-2.10.3.jar
jackson-databind-2.10.3.jar
kafka-clients-0.10.2.1.jar
Я, наверное, перепутал версии этих библиотек, но не могу понять, какие мне использовать. В документах говорится, что они должны быть «готовыми к использованию JAR-пакетами», но мне пришлось добавить, например, библиотеки Джексона, чтобы исправить NoClassDefFoundError
s.
Какой правильный набор банок будет исправлять NoSuchMethodError
при чтении сообщений Kafka Avro с sql-client.sh
?
Редактировать 2020-04-03:
Удаление flink-avro-1.10.0.jar
и flink-connector-kafka_2.12-1.10.0.jar
устраняет эту ошибку, но дает ошибку десериализации :
Flink SQL> select * from VideoLabeled limit 10;
[ERROR] Could not execute SQL statement. Reason:
org.apache.avro.AvroRuntimeException: Malformed data. Length is negative: -1