Я хочу использовать 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 для подключения к серверу.
Чего-то не хватает в конфигурации разъема выше?