【问题标题】:SQL Server Connection Failure - Debezium - Kafka ConnectSQL Server 连接失败 - Debezium - Kafka Connect
【发布时间】:2020-08-28 01:34:39
【问题描述】:

我们正在尝试为 SQL-Server (mssql) 中的一些表设置 SQL-Server->Debezium->Kafka Connect->Kafka Pipeline 设置

在启动设置时,收到以下错误: 日志:

{
  "name": "mssql-server-uat",
  "connector": {
    "state": "RUNNING",
    "worker_id": "172.17.0.3:8083"
  },
  "tasks": [
    {
      "id": 0,
      "state": "FAILED",
      "worker_id": "172.17.0.3:8083",
      "trace": <separately given below>
    }
  ],
  "type": "source"
}

追踪

org.apache.kafka.connect.errors.ConnectException: An exception occurred in the change event producer. This connector will be stopped.
    at io.debezium.pipeline.ErrorHandler.setProducerThrowable(ErrorHandler.java:42)
    at io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource.execute(SqlServerStreamingChangeEventSource.java:267)
    at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:101)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Connection timed out (Read failed)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2892)
    at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:2031)
    at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:6418)
    at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:7579)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:590)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:522)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7194)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2935)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:248)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:223)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:444)
    at io.debezium.jdbc.JdbcConnection.prepareQueryAndMap(JdbcConnection.java:657)
    at io.debezium.connector.sqlserver.SqlServerConnection.timestampOfLsn(SqlServerConnection.java:210)
    at io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource.lambda$execute$1(SqlServerStreamingChangeEventSource.java:243)
    at io.debezium.jdbc.JdbcConnection.prepareQuery(JdbcConnection.java:525)
    at io.debezium.connector.sqlserver.SqlServerConnection.getChangesForTables(SqlServerConnection.java:172)
    at io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource.execute(SqlServerStreamingChangeEventSource.java:162)
    ... 6 more
Caused by: java.net.SocketException: Connection timed out (Read failed)
    at java.base/java.net.SocketInputStream.socketRead0(Native Method)
    at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)
    at java.base/java.net.SocketInputStream.read(SocketInputStream.java:168)
    at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140)
    at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:2023)
    ... 21 more

可能的原因是什么?因为 sql-server 启动并正常运行,这很奇怪

如果需要,请评论问题以获取任何具体信息

编辑:此错误不会一直阻塞连接。启动后,连接正常,CDC事件流式传输到Kafka,甚至被我们编写的Kafka-Consumer读取,但突然超时并出现上述错误。

【问题讨论】:

    标签: sql-server apache-kafka apache-kafka-connect mssql-jdbc debezium


    【解决方案1】:

    Kafka Connect 无法连接到您的 SQL Server。

    SQLServerException: Connection timed out
    

    可能的原因可能是:

    1. 您在连接器配置中指定了错误的主机名
    2. 您的网络不允许 Kafka Connect 连接到 SQL Server(例如,如果您使用 Docker 并且未正确配置网络)
    3. 防火墙阻止了到 SQL Server 的入站流量

    编辑:

    1. 如果错误是间歇性的,则表明 SQL Server 本身可能正在超时,因此我会与您的 DBA 交谈并请他们查看正在运行的实例和机器,看看是否有迹象表明为什么连接会超时。

    【讨论】:

    • 是的,我明白了。但问题实际上是,这并不总是发生。它发生不一致。我们有一些从 kafka 消耗的事件并记录在我们的 graylog 中。这只是不一致地随机发生。 TLDR;连接已启动,发送事件,但此超时错误随机出现
    • 1 被排除在外,因为正如我所说,有时它会正确连接并将 cdc 事件发送到 Kafka Stream。 2 是可能的,因为我们使用的是 kafka docker 镜像。您能否指导有关 docker 网络配置的操作? 3. 将与 techops 团队一起调查并确保 docker ip 未被阻止
    • 我已经修改了答案
    猜你喜欢
    • 2020-04-25
    • 2019-09-06
    • 2020-08-22
    • 2019-02-16
    • 2019-01-21
    • 2020-02-16
    • 2020-05-07
    • 2018-11-23
    • 1970-01-01
    相关资源
    最近更新 更多