[英]Debezium How do I correctly register the SqlServer connector with Kafka Connect - connection refused
問題:
如何使用 Kafka Connect 正確注冊 SqlServer 連接器以連接到獨立的 SQL 服務器實例? 注意:我沒有在 Docker 中運行 SQL 服務器。
錯誤:
錯誤:原因:com.microsoft.sqlserver.jdbc.SQLServerException:與主機 127.0.0.1、端口 1433 的 TCP/IP 連接失敗。 錯誤:“連接被拒絕(連接被拒絕)。驗證連接屬性。確保 SQL 服務器的實例在主機上運行並在端口接受 TCP/IP 連接。確保 TCP 與端口的連接未被阻止防火牆。”。
故障排除:
語境:
我正在嘗試使用 Docker 在 Windows 10 上設置 Debezium。 我可以在 Powershell 中成功運行以下命令而沒有問題:
docker run -it --rm --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 debezium/zookeeper:1.1
docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper debezium/kafka:1.1
docker run -it --rm --name connect -p 8083:8083 -e GROUP_ID=1 -e CONFIG_STORAGE_TOPIC=my_connect_configs -e OFFSET_STORAGE_TOPIC=my_connect_offsets -e STATUS_STORAGE_TOPIC=my_connect_statuses --link zookeeper:zookeeper --link kafka:kafka debezium/connect:1.1
當我嘗試使用 Kafka-Connect 注冊 SQL 服務器connect
時出現錯誤(見上文),我運行以下命令:
Invoke-RestMethod -Method Post -Uri 'http://localhost:8083/connectors/' -Headers @{'Accept' = 'application/json'; 'Content-Type' = 'application/json'} -Body '{"name": "mssqlserver-localhost-testDb-connector", "config": {"connector.class": "io.debezium.connector.sqlserver.SqlServerConnector", "database.hostname": "127.0.0.1", "database.port": "1433", "database.user": "svc_kafka", "database.password": "password", "database.dbname": "Posts", "database.server.name": "LT-LS231", "table.whitelist": "dbo.Posts", "database.history.kafka.bootstrap.servers": "kafka:9092", "database.history.kafka.topic": "dbhistory.LT-LS231" }}'
格式化后的 JSON 如下:
Invoke-RestMethod -Method Post -Uri 'http://localhost:8083/connectors/' -Headers @{'Accept' = 'application/json'; 'Content-Type' = 'application/json'} -Body '
{
"name": "mssqlserver-localhost-testDb-connector",
"config": {
"connector.class": "io.debezium.connector.sqlserver.SqlServerConnector",
"database.hostname": "127.0.0.1",
"database.port": "1433",
"database.user": "svc_kafka",
"database.password": "password",
"database.dbname": "Posts",
"database.server.name": "LT-LS231",
"table.whitelist": "dbo.Posts",
"database.history.kafka.bootstrap.servers": "kafka:9092",
"database.history.kafka.topic": "dbhistory.LT-LS231"
}
}'
這是根據 Debezium 網站上提供的 JSON 建模的: https://debezium.io/documentation/reference/1.1/connectors/sqlserver.html#sqlserver-deploying-a-connector
問題在於對localhost
的引用。 如果您在 Docker 容器中運行 Connect,則localhost
是容器的本地主機,而不是機器的本地主機。 嘗試在docker0
接口或所有接口上公開 SQL 服務器,然后在注冊請求中使用docker0
IP。
非生產環境的解決方案是使用host.docker.internal
。 這可以在 Docker 的網站上找到: https://docs.docker.com/docker-for-windows/networking/ 。 請參閱標題為I WANT TO CONNECT FROM A CONTAINER TO A SERVICE ON THE HOST
部分。 我需要查看 Jiri 的回答中推薦的Docker0
。
正確的JSON如下:
{
"name": "LT-LS231-mssqlserver-connector",
"config": {
"connector.class": "io.debezium.connector.sqlserver.SqlServerConnector",
"database.server.name": "staging",
"database.hostname": "host.docker.internal",
"database.port": "1433",
"database.user": "svc_kafka",
"database.password": "*********",
"database.dbname": "Test",
"table.whitelist": "dbo.Posts",
"database.history.kafka.bootstrap.servers": "kafka:9092",
"database.history.kafka.topic": "dbhistory.Posts"
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.