【问题标题】:Kafka Connect JDBC sink to Oracle task FAILEDKafka 将 JDBC 接收器连接到 Oracle 任务失败
【发布时间】:2018-03-01 18:37:05
【问题描述】:

我正在尝试将数据从 Kafka avro 主题接收到我事先创建的现有 Oracle 数据库表中。 我以分布式模式运行 Kafka Connect(3 个工作人员)。 当我通过 REST 提交新连接器时,它会创建一个连接器,一个新任务,但该任务立即失败。 不明白为什么?以下是任务错误和我的配置。

任务错误

{"state":"FAILED","trace":"org.apache.kafka.connect.errors.ConnectException: Exiting WorkerSinkTask due to unrecoverable exception.
at org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:457)
at org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:251)
at org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:180)
at org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:148)
at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:146)
at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:190)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)","id":0,"worker_id":"kafka_host02:8083"}

Kafka Connect 配置

bootstrap.servers=kafka_host01:9092,kafka_host02:9092,kafka_host03:9092
group.id=connect-cluster-00
key.converter=io.confluent.connect.avro.AvroConverter
key.converter.schema.registry.url=http://kafka_host01:8081
value.converter=io.confluent.connect.avro.AvroConverter
value.converter.schema.registry.url=http://kafka_host01:8081
key.converter.schemas.enable=true
value.converter.schemas.enable=true
internal.key.converter=org.apache.kafka.connect.json.JsonConverter
internal.value.converter=org.apache.kafka.connect.json.JsonConverter
internal.key.converter.schemas.enable=false
internal.value.converter.schemas.enable=false
offset.storage.topic=connect-offsets
offset.storage.replication.factor=3
config.storage.topic=connect-configs
config.storage.replication.factor=3
status.storage.topic=connect-status
status.storage.replication.factor=3
offset.flush.interval.ms=10000
rest.port=8083

连接器提交命令

curl -X POST -H "Content-Type: application/json" --data '{"name": "heat-predict-ora-sink", "config": {"connector.class":"io.confluent.connect.jdbc.JdbcSinkConnector", "tasks.max":"1", "topics":"MY-TEST-02_topic", "connection.user":"scott", "connection.password":"tiger", "connection.url":"jdbc:oracle:thin:@orahost.localdomain:1521:orcl", "key.converter":"io.confluent.connect.avro.AvroConverter", "key.converter.schema.registry.url":"http://localhost:8081", "value.converter":"io.confluent.connect.avro.AvroConverter", "value.converter.schema.registry.url":"http://localhost:8081", "insert.mode":"insert", "batch.size":"0", "table.name.format":"TEST.MY_TABLE_IN", "pk.mode":"none", "pk.fields":"none" }}' http://localhost:8083/connectors

请告诉我为什么它会这样?

【问题讨论】:

  • 连接日志中是否还有其他错误?如果您在分布式模式下将其作为单个工作人员运行,这是否有效?
  • 我开始在单个worker上进行connect-distributed,发现根本问题是找不到ojdbc8.jar,我将其放入confluent/share/java/kafka-connect-jdbc文件夹并它有帮助。
  • 但还有另一个问题 - 现在我在连接日志中看到有关 SID 的错误。从字面上看,它说我 - ORA-12505,TNS:listener 目前不知道连接描述符中给出的 SID。但是我在主机上获得了 tnsnames.ora,并且能够使用 sqlplus 实用程序连接到 SID。可能我应该在某个地方复制 tnsnames.ora 吗?
  • 我解决了这个问题 :))) 通过将 jdbc 的连接字符串中的“:”更改为“/”符号。现在我发现了下一个麻烦,我看到错误“表 ABC.DATA_IN 丢失并且自动创建被禁用”。但再次在 sqlplus 中,我可以连接并从中进行选择
  • 我发现另一个人遇到了类似的问题 - github.com/confluentinc/kafka-connect-jdbc/issues/246 它表明 Kafka Connect 无法理解要使用 RDMBS 中的哪个模式。如何解决?

标签: oracle jdbc apache-kafka apache-kafka-connect confluent-platform


【解决方案1】:

基于https://github.com/confluentinc/kafka-connect-jdbc/issues/221,我建议您以要写入数据的Schema的用户身份连接到Oracle,而不是指定schema.table

【讨论】:

    【解决方案2】:

    当我允许 Kafka Connect 用户在自己的模式中自动创建表时,我终于设法写入 RDBMS。奇怪的是新表中的字段名称用引号引起来,但它不是一个停止器。感谢所有试图帮助解答的人!

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 2019-06-17
      • 2015-06-16
      • 2019-11-15
      • 2020-12-09
      • 2019-05-17
      • 2018-05-01
      • 2021-05-07
      • 2021-05-17
      相关资源
      最近更新 更多