【问题标题】:Kafka Connect with a JdbcConnectionSource connector fails to create task (connector is RUNNING but task is not)带有 JdbcConnectionSource 连接器的 Kafka Connect 无法创建任务(连接器正在运行但任务不是)
【发布时间】:2020-08-05 11:07:02
【问题描述】:

似乎我经常根据查询从 JdbcConnectionSource 创建一个 Kafka Connect 连接器,并且连接器已成功创建,状态为“RUNNING”,但未创建任何任务。在我的容器的控制台日志中,我看不到任何我可以判断的错误的迹象:没有错误,没有警告,没有解释任务失败的原因。我可以让其他连接器工作,但有时不能。

当连接器无法创建 RUNNING 任务时,如何获取更多信息以进行故障排除?

我将在下面发布我的连接器配置示例。

我正在使用 Kafka Connect 5.4.1-ccs。

连接器配置(它是 JDBC 后面的 Oracle 数据库):

{
    "name": "FiscalYear",
    "config": {
        "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
        "tasks.max": 1,
        "connection.url": "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost.example.com)(PORT=1521))(LOAD_BALANCE=OFF)(FAILOVER=OFF)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MY_DB_PRI)(UR=A)))",
        "connection.user":"myuser",
        "connection.password":"mypass",
        "mode": "timestamp",
        "timestamp.column.name": "MAINT_TS",
        "topic.prefix": "MyTeam.MyTopicName",
        "poll.interval.ms": 5000,
        "value.converter" : "org.apache.kafka.connect.json.JsonConverter",
        "value.converter.schemas.enable": "false",
        "numeric.mapping": "best_fit",

        "_comment": "The query is wrapped in `select * from ()` so that JdbcSourceConnector can automatically append a WHERE clause.",
        "query": "SELECT * FROM (SELECT fy_nbr, min(fy_strt_dt) fy_strt_dt, max(fy_end_dt) fy_end_dt FROM myuser.fsc_dt fd WHERE fd.fy_nbr >= 2020 and fd.fy_nbr < 2022 group by fy_nbr)/* outer query must have no WHERE clause so that the source connector can append one of its own */"
    }
}  

以及创建我的工人的 Dockerfile:

FROM confluentinc/cp-kafka-connect:latest

# each "CONNECT_" env var refers to a Kafka Connect setting; e.g. CONNECT_REST_PORT refers to setting rest.port
#  see also https://docs.confluent.io/current/connect/references/allconfigs.html

ENV CONNECT_BOOTSTRAP_SERVERS="d.mybroker.example.com:9092"
ENV CONNECT_REST_PORT="8083"
ENV CONNECT_GROUP_ID="MyGroup2" 

ENV CONNECT_CONFIG_STORAGE_TOPIC="MyTeam.ConnectorConfig" 
ENV CONNECT_OFFSET_STORAGE_TOPIC="MyTeam.ConnectorOffsets" 
ENV CONNECT_STATUS_STORAGE_TOPIC="MyTeam.ConnectorStatus" 

ENV CONNECT_KEY_CONVERTER="org.apache.kafka.connect.json.JsonConverter" 
ENV CONNECT_VALUE_CONVERTER="org.apache.kafka.connect.json.JsonConverter" 

ENV CONNECT_INTERNAL_KEY_CONVERTER="org.apache.kafka.connect.json.JsonConverter"  
ENV CONNECT_INTERNAL_VALUE_CONVERTER="org.apache.kafka.connect.json.JsonConverter" 

ENV CONNECT_LOG4J_ROOT_LOGLEVEL="INFO"

COPY ojdbcDrivers /usr/share/java/kafka-connect-jdbc

(我还通过我的 Helm 图表设置了 REST 公布的主机名环境变量,所以上面没有设置它。)

在它启动后,我创建连接器,然后从 REST“/status”中获取它:

{"name":"FiscalYear","connector":{"state":"RUNNING","worker_id":"10.1.2.3:8083"},"tasks":[],"type":"source"}

【问题讨论】:

标签: apache-kafka apache-kafka-connect


【解决方案1】:

当连接器无法创建 RUNNING 任务时,如何获取更多信息以进行故障排除?

我会提高您的 Kafka Connect 工作人员的日志记录级别。 由于您使用的是 Apache Kafka 2.4,因此您可以动态执行此操作,这非常有用。向您的 Kafka Connect 工作人员发出此 REST API 调用:

curl -X PUT http://localhost:8083/admin/loggers/io.confluent \
     -H "Content-Type:application/json" -d '{"level": "TRACE"}'

这会将任何 Confluent 连接器的所有消息添加到 TRACE。它还返回单个记录器的列表,您可以从中挑选不同的记录器并根据需要将其特定的日志级别向上或向下调整。例如:

curl -X PUT http://localhost:8083/admin/loggers/io.confluent.connect.jdbc.dialect.DatabaseDialects \
     -H "Content-Type:application/json" -d '{"level": "INFO"}'

参考:https://rmoff.net/2020/01/16/changing-the-logging-level-for-kafka-connect-dynamically/

【讨论】:

  • 太好了,我试过了,收到了很多信息。然后我将级别切换到 DEBUG,希望收到更少的消息,但遗憾的是它什么也没给我。从您回答的后半部分开始,我需要将一些细微的记录器设置为 DEBUG,并将其他记录器设置为 TRACE——有什么建议吗?
  • 为了学习,我故意更改了我的sql,以至于我无法选择timestamp.column.name中指定的列。然后我创建了连接器,果然没有创建任何任务。我看到了大量的 DEBUG 和 TRACE 日志,但我能提取的所有看起来相关的是Finished creating connector MyConnector (org.apache.kafka.connect.runtime.Worker)Finished starting connectors and tasks (org.apache.kafka.connect.runtime.distributed.DistributedHerder)。没有关于 SQL 是否错误或时间戳列不存在的线索。关于如何获得更好的日志的任何进一步提示?
  • 有什么想法吗?如果您有时间提供帮助,这也与此相关:stackoverflow.com/q/62217473/7453
猜你喜欢
  • 2020-06-05
  • 1970-01-01
  • 2021-08-28
  • 2020-08-14
  • 2021-07-19
  • 2015-08-15
  • 2017-12-05
  • 2019-02-02
  • 2020-06-11
相关资源
最近更新 更多