【问题标题】:Debezium Connector for SQL Server - connection refusedSQL Server 的 Debezium 连接器 - 连接被拒绝
【发布时间】:2019-10-18 10:25:36
【问题描述】:

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

我将 Docker 容器用于:

  • debezium/动物园管理员
  • debezium/kafka
  • debezium/连接
  • 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。疾控中心工作正常。

然后我将下面的连接器配置发送到 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 失败。错误:\“连接 拒绝了。验证连接属性。确保一个实例 的 SQL Server 正在主机上运行并接受 TCP/IP 连接 在港口。确保与端口的 TCP 连接不 被防火墙阻止。

大多数故障排除是如果数据库实际运行,或者端口被阻塞,但新的 MSSQL 数据库没有问题。它的容器处于活动状态,并且数据库正在成功运行。端口没有被阻塞。我可以使用 DbVisualizer 或其他具有以下配置的查询工具从主机成功连接到它:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    恕我直言,localhost 不正确,因为 localhost 是 Connect 容器和 SQL Server 容器中的其他内容。您应该将数据库容器链接到 Connect 容器并使用适当的主机名。

    【讨论】:

    • 是的,"database.hostname" 是 MSSQL docker 容器名称,在我的例子中是“sql1”,"database.server.name" 是“localhost”
    【解决方案2】:

    您需要首先设置您的 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

    【讨论】:

      猜你喜欢
      • 2013-09-20
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多