Kafka connect выдает исключение ClassNotFoundException, когда plugin.path имеет значения, разделенные запятыми

Я использую Kafka connect для создания соединения MQTT Kafka. Я помещаю все jar-файлы, специфичные для коннектора kafka MQTT, загруженные с конфлюентного сайта, в папку «/ data». И соответственно обновите файл «connect-standalone.properties», чтобы отразить путь к плагину, т.е.

plugin.path=/opt/kafka_2.11-2.1.1/libs,/data

Когда я запускаю Kafka Connect

./connect-standalone.sh ../config/connect-standalone.properties ../config/connect-mqtt-source.properties

Я получаю следующую ошибку:

[2019-07-18 10: 26: 05,823] ИНФОРМАЦИЯ Загрузка плагина из: /data/kafka-connect-mqtt-1.2.1.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader: 220) [2019 -07-18 10: 26: 05,829] ОШИБКА Остановка из-за ошибки (org.apache.kafka.connect.cli.ConnectStandalone: ​​128) java.lang.NoClassDefFoundError: com / github / jcustenborder / kafka / connect / utils / VersionUtil at io.confluent.connect.mqtt.MqttSourceConnector.version (MqttSourceConnector.java:29) в org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.versionFor (DelegatingClassLoader.java:344)

снимок экрана, как показано ниже:  введите описание изображения здесь

Обратите внимание, что «connect-utils-0.3.140.jar» находится в папке «/ data», как выделено красным подчеркиванием.

Теперь, если я сделаю снимок экрана с мягкой ссылкой ниже или скопирую все банки из папки «/ data» и обновлю путь к плагину до:

plugin.path=/opt/kafka_2.11-2.1.1/libs

введите здесь описание изображения

Kafka connect отлично работает.

Любая помощь, почему он не работает в первом сценарии, то есть конкретные jar-файлы коннектора kafka в разных папках


person sumit kumar    schedule 18.07.2019    source источник


Ответы (1)


Из руководства пользователя Kafka Connect на странице Confluent:

...

Kafka Connect изолирует каждый подключаемый модуль друг от друга, чтобы библиотеки одного подключаемого модуля не зависели от библиотек других подключаемых модулей. Это очень важно при смешивании и сопоставлении коннекторов от нескольких провайдеров.

Плагин Kafka Connect:

  1. uber JAR, содержащий все файлы классов для подключаемого модуля и его сторонние зависимости в одном файле JAR; или
  2. каталог в файловой системе, содержащий файлы JAR для подключаемого модуля и его сторонних зависимостей.

В вашем случае вы должны поместить jar-файлы плагинов в одну папку, например /data/pluginName не прямо в /data/

Более подробную информацию можно найти здесь: Установка подключаемых модулей

person Bartosz Wardziński    schedule 25.07.2019
comment
Привет @wardziniak, проблема заключается в установке нескольких путей в качестве значения, разделенного запятыми, для переменной plugin.path. - person sumit kumar; 05.08.2019
comment
@sumitkumar, да я это понимаю. Если плагин представляет собой только одну банку, его можно напрямую поместить в один из каталогов из plugin.path, но если плагин состоит из нескольких банок, все они должны быть помещены в один каталог, то есть в один из каталогов plugin.path. В вашем случае банки должны находиться в /data/pluginName каталоге - person Bartosz Wardziński; 05.08.2019