Ошибка подключения к SQL Server - Debezium - Kafka Connect

Мы пытаемся настроить SQL-Server->Debezium->Kafka Connect->Kafka Pipeline установку для нескольких таблиц в SQL-сервере (mssql)

При запуске установки появляется следующая ошибка: Журналы:

{
  "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-сервер работает нормально, и это странно

При необходимости прокомментируйте проблему для получения какой-либо конкретной информации.

РЕДАКТИРОВАТЬ: эта ошибка не блокирует соединение все время. При запуске соединение работает, события CDC передаются в Kafka, даже читаются Kafka-Consumer, который мы написали, но внезапно истекает время ожидания и возникает вышеуказанная ошибка.


person Udaya Prakash    schedule 12.05.2020    source источник


Ответы (1)


Kafka Connect не может подключиться к вашему SQL Server.

SQLServerException: Connection timed out

Возможные причины:

  1. Вы указали неправильное имя хоста в конфигурации коннектора
  2. Ваша сеть не позволяет Kafka Connect подключаться к SQL Server (например, если вы используете Docker и неправильно настроили сеть)
  3. Брандмауэр блокирует входящий трафик к SQL Server

изменить:

  1. Если ошибка является прерывистой, это говорит о том, что, возможно, сам SQL Server истекает, поэтому я хотел бы поговорить с вашими администраторами баз данных и попросить их взглянуть на экземпляр и машину, на которой он работает, чтобы узнать, есть ли указание на то, почему соединение будет тайм-аут.
person Robin Moffatt    schedule 12.05.2020
comment
Да, я понял. Но проблема в том, что это происходит не все время. Бывает непоследовательно. У нас есть несколько событий, полученных из kafka и зарегистрированных в нашем сером журнале. Просто это происходит непоследовательно и в случайное время. TL; DR; Соединение установлено, события отправляются, но эта ошибка тайм-аута возникает случайным образом - person Udaya Prakash; 12.05.2020
comment
1 исключен, поскольку, как я уже сказал, иногда он подключается правильно и отправляет события cdc в поток Kafka. 2 возможно, так как мы используем образ докера kafka. Можете ли вы посоветовать, что делать с конфигурацией сети докеров? 3. Разберемся с командой techops и убедимся, что ip докера не заблокирован. - person Udaya Prakash; 12.05.2020
comment
Я изменил свой ответ - person Robin Moffatt; 12.05.2020