Не удается запустить clickhouse-jdb c в контейнере Kafka Connect docker - PullRequest
0 голосов

Основная цель - передача данных из Kafka topi c в таблицу Clickhouse. Я думаю, можно подумать, почему бы не использовать Clickhouse Kafka Engine? Ну, есть известная проблема - дублированные сообщения . Я пробовал до последней версии сервера Clickhouse , но все равно.

Итак, я решил использовать Kafka Connect JdbcSinkConnector, но получил ошибку:

java. sql .SQLException: не найден подходящий драйвер для jdb c: clickhouse : // localhost: 8123 / по умолчанию на java. sql .DriverManager.getConnection (DriverManager. java: 689) на java. sql .DriverManager.getConnection (DriverManager. java: 208) в io.confluent.connect.jdb c .dialect.GenericDatabaseDialect.getConnection (GenericDatabaseDialect. java: 211) в io.confluent.connect.jdb c .util.CachedConnectionProvider.newConnection:. 88) в io.confluent.connect.jdb c .util.CachedConnectionProvider.getConnection (CachedConnectionProvider. java: 62) в io.confluent.connect.jdb c .sink.JdbcDbWriter.write (Jdbc * 1067. *: 56) at io.confluent.connect.jdb c .sink.JdbcSinkTask.put (JdbcSinkTask. java: 74) в org. apache .kafka.connect.runtime.WorkerSinkTask.deliverMessagesT (WorkerSink). 1071 *: 538) в орг. apache .kafka.connect.runtime.WorkerSinkTask.pol l (WorkerSinkTask. java: 321) в орг. apache .kafka.connect.runtime.WorkerSinkTask.iteration (WorkerSinkTask. java: 224) в орг. apache .kafka.connect.runtime.WorkerSinkTask. выполнить (WorkerSinkTask. java: 192) в орг. apache .kafka.connect.runtime.WorkerTask.doRun (WorkerTask. java: 177) в орг. apache .kafka.connect.runtime.WorkerTask. выполнить (WorkerTask. java: 227)
в java .util.concurrent.Executors $ RunnableAdapter.call (Executors. java: 511) в java .util.concurrent.FutureTask.run (FutureTask . java: 266) в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1149) в java .util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java 6: ) в java .lang.Thread.run (Thread. java: 748)

Необходимо установить драйвер Clickhouse JDB C. Я нашел официальный драйвер JDB C и загрузил clickhouse-jdb c -0.2.4.jar со вкладки "релизы" в контейнер.

Также установлен jdk:

apt-get update && apt-get update
apt-get install default-jdk

Кстати, контейнер Kafka Connect docker построен из этого образа:

confluentinc/cp-kafka-connect:5.2.1

Я попытался запустить jar- файл несколькими способами (нет Main-Class в MANIFEST.MF):

java -jar clickhouse-jdbc-0.2.4.jar 

Это вернуло ошибку:

нет атрибута основного манифеста, в clickhouse-jdb c -0.2.4.jar

Тогда я обнаружил, что если нет Main-Class в MANIFEST.MF, -jar не будет работать. И я попробовал команду:

java -cp clickhouse-jdbc-0.2.4.jar ru.yandex.clickhouse.ClickHouseDriver

и снова потерпел неудачу с ошибкой:

Ошибка: не удалось найти или загрузить основной класс ru.yandex.clickhouse.ClickHouseDriver

Как правильно установить clickhouse-jdb c?

1 Ответ

1 голос
/ 06 марта 2020
  1. Водители не имеют основных классов. Вы не можете запустить их напрямую.

  2. Образ Docker уже содержит действительный JDK, и установка другого не устранит ошибку.

  3. ClickHouse Kafka Ingestor , вероятно, имеет семантику "хотя бы один раз", поэтому дубликатов избежать в любом случае невозможно. Соединитель источника JDB C может иметь ту же проблему.

  4. Вы бы поместили JAR-драйвер под /usr/share/java/kafka-connect-jdbc - https://www.confluent.io/blog/kafka-connect-deep-dive-jdbc-source-connector/#no -suitable-driver-found-found

...