【问题标题】:Cannot start clickhouse-jdbc in Kafka Connect docker container无法在 Kafka Connect docker 容器中启动 clickhouse-jdbc
【发布时间】:2020-06-19 08:02:16
【问题描述】:

主要目的是将数据从 Kafka 主题传输到 Clickhouse 表中。我想人们会想为什么不使用 Clickhouse Kafka Engine?嗯,有known problem - duplicated messages。我尝试了latest version of Clickhouse server,但都是一样的。

所以,我决定使用 Kafka Connect JdbcSinkConnector 但出现错误:

java.sql.SQLException:找不到合适的驱动程序 jdbc:clickhouse://localhost:8123/默认在 java.sql.DriverManager.getConnection(DriverManager.java:689) 在 java.sql.DriverManager.getConnection(DriverManager.java:208) 在 io.confluent.connect.jdbc.dialect.GenericDatabaseDialect.getConnection(GenericDatabaseDialect.java:211) 在 io.confluent.connect.jdbc.util.CachedConnectionProvider.newConnection(CachedConnectionProvider.java:88) 在 io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:62) 在 io.confluent.connect.jdbc.sink.JdbcDbWriter.write(JdbcDbWriter.java:56) 在 io.confluent.connect.jdbc.sink.JdbcSinkTask.put(JdbcSinkTask.java:74) 在 org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:538) 在 org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:321) 在 org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:224) 在 org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:192) 在 org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:177) 在 org.apache.kafka.connect.runtime.WorkerTask.run(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:624) 在 java.lang.Thread.run(Thread.java:748)

需要安装 Clickhouse JDBC 驱动程序。我找到了the official JDBC driver 并将clickhouse-jdbc-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 文件(MANIFEST.MF 中没有 Main-Class):

java -jar clickhouse-jdbc-0.2.4.jar 

这返回了错误:

没有主清单属性,在 clickhouse-jdbc-0.2.4.jar 中

然后我发现如果MANIFEST.MF 中没有Main-Class-jar 将不起作用。我尝试了命令:

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

然后再次失败并出现错误:

错误:无法找到或加载主类 ru.yandex.clickhouse.ClickHouseDriver

安装clickhouse-jdbc的正确方法是什么?

【问题讨论】:

  • 你需要 clickhouse-jdbc-0.2.4-shaded.jar (5MB) 而不是 clickhouse-jdbc-0.2.4.jar (202kb)——它只是没有 3party 库的 CH-jdbc 代码

标签: jdbc apache-kafka apache-kafka-connect clickhouse


【解决方案1】:
  1. 驱动程序没有主类。您不能直接运行它们。

  2. Docker 镜像已经有一个有效的 JDK,安装另一个不能解决错误。

  3. ClickHouse Kafka Ingestor可能具有“至少一次”语义,因此无论如何都无法避免重复。 JDBC 源连接器可能有同样的问题。

  4. 您可以将驱动程序 JAR 放在 /usr/share/java/kafka-connect-jdbc - https://www.confluent.io/blog/kafka-connect-deep-dive-jdbc-source-connector/#no-suitable-driver-found

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-06
    • 2021-06-24
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2018-12-14
    • 1970-01-01
    相关资源
    最近更新 更多