When I'm trying to connect Debezium to my SQL Server database after enable CDC feature, I have this error message :
java.lang.RuntimeException: Couldn't obtain database name,
at io.debezium.connector.sqlserver.SqlServerConnection.retrieveRealDatabaseName(SqlServerConnection.java:364),
at io.debezium.connector.sqlserver.SqlServerConnection.<init>(SqlServerConnection.java:84),
at io.debezium.connector.sqlserver.SqlServerConnectorTask.start(SqlServerConnectorTask.java:86),
at io.debezium.connector.common.BaseSourceTask.start(BaseSourceTask.java:47),
at org.apache.kafka.connect.runtime.WorkerSourceTask.execute(WorkerSourceTask.java:198),
at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:175),
at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:219),
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511),
at java.util.concurrent.FutureTask.run(FutureTask.java:266),
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149),
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624),
at java.lang.Thread.run(Thread.java:748),
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "SQL Server did not return a response. The connection has been closed. ClientConnectionId:bce7b974-bac3-4068-b85f-271ba41295e4".,
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2670),
at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1837),
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2257),
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1921),
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1762),
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1077),
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:623),
at io.debezium.jdbc.JdbcConnection.lambda$patternBasedFactory$1(JdbcConnection.java:179),
at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:734),
at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:729),
at io.debezium.jdbc.JdbcConnection.queryAndMap(JdbcConnection.java:516),
at io.debezium.jdbc.JdbcConnection.queryAndMap(JdbcConnection.java:391),
at io.debezium.connector.sqlserver.SqlServerConnection.retrieveRealDatabaseName(SqlServerConnection.java:358),
... 11 more,
Caused by: java.io.IOException: SQL Server did not return a response. The connection has been closed. ClientConnectionId:bce7b974-bac3-4068-b85f-271ba41295e4,
at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.ensureSSLPayload(IOBuffer.java:780),
at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.readInternal(IOBuffer.java:836),
at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.read(IOBuffer.java:827),
at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.readInternal(IOBuffer.java:1009),
at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.read(IOBuffer.java:997),
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465),
at sun.security.ssl.InputRecord.read(InputRecord.java:503),
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975),
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367),
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395),
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379),
at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1767),
... 22 more,
Here is my connector configuration :
curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" localhost:8083/connectors/ -d '{ "name": "sql-connector",
"config": {
"connector.class": "io.debezium.connector.sqlserver.SqlServerConnector",
"database.hostname": "XXX.XXX.XXX.XXX",
"database.port": "1433",
"database.user": "login",
"database.password": "password",
"database.dbname": "BDNAME",
"database.server.name": "bdservername",
"table.whitelist": "bdSchema.TABLE",
"database.history.kafka.bootstrap.servers": "kafka:9092",
"database.history.kafka.topic": "dbhistory.TABLE" }
}'
I found a workaround here :
https://github.com/Microsoft/mssql-jdbc/issues/879#issuecomment-438825486
But is it possible to apply it on debezium connector? Is Debezium compatible with Sql Server 2008 R2 because in documentation it's write :
The functionality of the connector is based upon change data capture feature provided by SQL Server Standard (since SQL Server 2016 SP1) or Enterprise edition
For information, I used Debezium Docker Images 0.9.2 : - debezium/zookeeper - debezium/kafka - debezium/connect
Thanks in advance for your help.
Sébastien
NotSpecifiedvalue inauthenticationJDBC connection property as it shoud bypass the SSL and verify if Debezium works. Only after that it probably makes sense to work on security layer. - Jiri Pechanec