我想使用Kafka发布MSSQL CDC事件。
我将Docker容器用于:
容器开始如下:
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 Server容器中创建了新的MSSQL数据库。在新数据库中创建了1个表,并为该表打开CDC。 CDC工作正常。
然后我将以下连接器配置发送给Kafka Connect REST API,如下所示:
curl -X POST -H "Content-Type: application/json" -d @test-mssql-connector.json http://localhost:8083/connectors
使用test-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:TCP / IP连接 到主机localhost,端口1433失败。错误:\“连接 拒绝了验证连接属性。确保一个实例 Server的SQL Server在主机上运行并接受TCP / IP连接 在港口。确保没有与端口的TCP连接 被防火墙阻止。
大多数故障排除是数据库是否正在实际运行,或者端口是否被阻止,但是新的MSSQL数据库没有问题。它的容器处于活动状态,并且数据库已成功运行。端口未阻塞。我可以使用以下配置从DbVisualizer或其他查询工具从主机成功连接到它:
我可以成功使用telnet localhost 1433连接到服务器。
上面的连接器配置中是否缺少任何内容?
答案 0 :(得分:1)
恕我直言,localhost
是不正确的,因为localhost
是Connect容器和SQL Server容器中的其他东西。您应该将数据库容器链接到Connect容器,并使用适当的主机名。
答案 1 :(得分:0)
您需要首先设置您的sql容器,然后仅启动将sql服务器指定为附加链接的连接服务:
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 --link kafka:kafka debezium / connect