Коннектор Debezium для SQL Server - соединение отказано - PullRequest
1 голос
/ 02 июня 2019

Я хочу использовать Kafka для публикации событий MSSQL CDC.

Я использую контейнеры Docker для:

  • debezium / * 1006 Zookeeper *
  • debezium / Кафка
  • 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

Все контейнеры запускаются успешно.

Затем я создал новую базу данных MSSQL в контейнере SQL Server. Создал 1 таблицу в новом БД и включил CDC для этой таблицы. CDC работает нормально.

Затем я отправляю приведенную ниже конфигурацию соединителя в API REST Kafka Connect следующим образом:

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 или другие инструменты запросов со следующей конфигурацией:

  • сервер базы данных = localhost
  • порт базы данных = 1433
  • пользователь = SA
  • pw = xxxxxxxxxxxxx
  • имя базы данных = тест

Я могу успешно использовать telnet localhost 1433 для подключения к серверу.

Чего-то не хватает в конфигурации разъема выше?

1 Ответ

1 голос
/ 03 июня 2019

ИМХО localhost неверен, поскольку localhost - это что-то еще в контейнере Connect и в контейнере SQL Server.Вы должны связать контейнер базы данных с контейнером Connect и использовать соответствующее имя хоста.

...