SQL 服务器的 Debezium 连接器 - 连接被拒绝
Debezium Connector for SQL Server - connection refused
我想用Kafka发布MSSQL CDC事件。
我正在使用 Docker 个容器用于:
- debezium/zookeeper
- debezium/kafka
- debezium/connect
- 微软SQL服务器
容器启动如下:
docker run -it --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 debezium/zookeeper
docker run -it --name kafka -p 9092:9092 --link zookeeper:zookeeper debezium/kafka
docker run -it --name connect -p 8083:8083 -e GROUP_ID=1 -e CONFIG_STORAGE_TOPIC=my-connect-configs -e OFFSET_STORAGE_TOPIC=my-connect-offsets -e ADVERTISED_HOST_NAME="localhost" --link zookeeper:zookeeper --link kafka:kafka debezium/connect
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=xxxxxxxxxxxxx" -p 1433:1433 --name sql1 -d mcr.microsoft.com/mssql/server:2017-CU8-ubuntu
所有容器 运行 成功启动。
然后我在 SQL 服务器容器中创建了新的 MSSQL 数据库。在新数据库中创建了 1 table 并为此 table 打开了 CDC。 CDC 工作正常。
然后我将下面的连接器配置发送到 Kafka Connect REST API,如下所示:
curl -X POST -H "Content-Type: application/json" -d @test-mssql-connector.json http://localhost:8083/connectors
使用测试-mssql-connector.json
{
"name": "test-mssql-connector5",
"config": {
"connector.class": "io.debezium.connector.sqlserver.SqlServerConnector",
"database.hostname": "localhost",
"database.port": "1433",
"database.user": "SA",
"database.password": "xxxxxxxxxxxxx",
"database.dbname": "test",
"database.server.name": "sql1",
"table.whitelist": "dbo.Persons",
"database.history.kafka.bootstrap.servers": "kafka:9092",
"database.history.kafka.topic": "dbhistory.sql1"
}
}
但是,Kafka 连接器无法连接到 MSSQL 数据库,给出以下错误消息:
com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection
to the host localhost, port 1433 has failed. Error: \"Connection
refused. Verify the connection properties. Make sure that an instance
of SQL Server is running on the host and accepting TCP/IP connections
at the port. Make sure that TCP connections to the port are not
blocked by a firewall.
大多数故障排除是数据库实际上运行,或者端口被阻止,但是新的MSSQL db 没有问题。它的容器处于活动状态,数据库成功 运行。端口没有被阻塞。我可以使用 DbVisualizer 或具有以下配置的其他查询工具从主机成功连接到它:
- 数据库服务器=本地主机
- 数据库端口=1433
- 用户=SA
- pw = xxxxxxxxxxxxx
- 数据库名=test
我可以成功使用 telnet localhost 1433 连接到服务器。
上面的连接器配置是否遗漏了什么?
恕我直言,localhost
不正确,因为 localhost
是连接容器和 SQL 服务器容器中的其他内容。您应该 link 将数据库容器放入连接容器并使用适当的主机名。
您需要先设置 sql 容器,然后仅启动连接服务,将 sql 服务器指定为附加 link:
docker 运行 -it --name connect -p 8083:8083 -e GROUP_ID=1 -e CONFIG_STORAGE_TOPIC=my-connect-configs -e OFFSET_STORAGE_TOPIC=my-connect-offsets -e ADVERTISED_HOST_NAME="localhost" --link zookeeper:zookeeper --link kafka:kafka --link kafka:kafka debezium/connect
我想用Kafka发布MSSQL CDC事件。
我正在使用 Docker 个容器用于:
- debezium/zookeeper
- debezium/kafka
- debezium/connect
- 微软SQL服务器
容器启动如下:
docker run -it --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 debezium/zookeeper
docker run -it --name kafka -p 9092:9092 --link zookeeper:zookeeper debezium/kafka
docker run -it --name connect -p 8083:8083 -e GROUP_ID=1 -e CONFIG_STORAGE_TOPIC=my-connect-configs -e OFFSET_STORAGE_TOPIC=my-connect-offsets -e ADVERTISED_HOST_NAME="localhost" --link zookeeper:zookeeper --link kafka:kafka debezium/connect
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=xxxxxxxxxxxxx" -p 1433:1433 --name sql1 -d mcr.microsoft.com/mssql/server:2017-CU8-ubuntu
所有容器 运行 成功启动。
然后我在 SQL 服务器容器中创建了新的 MSSQL 数据库。在新数据库中创建了 1 table 并为此 table 打开了 CDC。 CDC 工作正常。
然后我将下面的连接器配置发送到 Kafka Connect REST API,如下所示:
curl -X POST -H "Content-Type: application/json" -d @test-mssql-connector.json http://localhost:8083/connectors
使用测试-mssql-connector.json
{
"name": "test-mssql-connector5",
"config": {
"connector.class": "io.debezium.connector.sqlserver.SqlServerConnector",
"database.hostname": "localhost",
"database.port": "1433",
"database.user": "SA",
"database.password": "xxxxxxxxxxxxx",
"database.dbname": "test",
"database.server.name": "sql1",
"table.whitelist": "dbo.Persons",
"database.history.kafka.bootstrap.servers": "kafka:9092",
"database.history.kafka.topic": "dbhistory.sql1"
}
}
但是,Kafka 连接器无法连接到 MSSQL 数据库,给出以下错误消息:
com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host localhost, port 1433 has failed. Error: \"Connection refused. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.
大多数故障排除是数据库实际上运行,或者端口被阻止,但是新的MSSQL db 没有问题。它的容器处于活动状态,数据库成功 运行。端口没有被阻塞。我可以使用 DbVisualizer 或具有以下配置的其他查询工具从主机成功连接到它:
- 数据库服务器=本地主机
- 数据库端口=1433
- 用户=SA
- pw = xxxxxxxxxxxxx
- 数据库名=test
我可以成功使用 telnet localhost 1433 连接到服务器。
上面的连接器配置是否遗漏了什么?
恕我直言,localhost
不正确,因为 localhost
是连接容器和 SQL 服务器容器中的其他内容。您应该 link 将数据库容器放入连接容器并使用适当的主机名。
您需要先设置 sql 容器,然后仅启动连接服务,将 sql 服务器指定为附加 link:
docker 运行 -it --name connect -p 8083:8083 -e GROUP_ID=1 -e CONFIG_STORAGE_TOPIC=my-connect-configs -e OFFSET_STORAGE_TOPIC=my-connect-offsets -e ADVERTISED_HOST_NAME="localhost" --link zookeeper:zookeeper --link kafka:kafka --link kafka:kafka debezium/connect