用于SQL Server的Debezium连接器-连接被拒绝

时间:2019-06-02 18:03:20

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

我想使用Kafka发布MSSQL CDC事件。

我将Docker容器用于:

  • debezium / zookeeper
  • debezium / kafka
  • debezium / connect
  • Microsoft SQL Server

容器开始如下:

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或其他查询工具从主机成功连接到它:

  • 数据库服务器=本地主机
  • 数据库端口= 1433
  • 用户= SA
  • pw = xxxxxxxxxxxxx
  • 数据库名称=测试

我可以成功使用telnet localhost 1433连接到服务器。

上面的连接器配置中是否缺少任何内容?

2 个答案:

答案 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

相关问题