Дебезиум SQL Сервер Комплект Соединителей Исходного Комплекта Кафка Брокер - PullRequest
3 голосов
/ 29 марта 2020

Я пытаюсь настроить docker среду Confluent Kafka Platform и интегрировать с Debezium SQL Server Source Connector.

Я следовал этому руководству Confluent для платформы Kafka, затем этому учебному пособию по Debezium для SQL Server Source Connector.

Мой контейнерный брокер имеет имя broker, этот контейнер и остальные другие контейнеры (indclue connect контейнер) находятся в одной сети, и я убедился, что они могут пинговать и lnet друг друга.

В учебнике Debezium я застрял на шаге Запустите серверный коннектор Debezium SQL , потому что я получаю сообщение об ошибке, которое указывает, что коннектор пытается получить доступ к брокеру Kafka через localhost:9092 вместо broker:9092:

[2020-03-29 10:46:30,907] WARN [Consumer clientId=server1-dbhistory, groupId=server1-dbhistory] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2020-03-29 10:46:32,114] WARN [Consumer clientId=server1-dbhistory, groupId=server1-dbhistory] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2020-03-29 10:46:32,969] WARN [Consumer clientId=server1-dbhistory, groupId=server1-dbhistory] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2020-03-29 10:46:34,127] WARN [Consumer clientId=server1-dbhistory, groupId=server1-dbhistory] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2020-03-29 10:46:35,333] WARN [Consumer clientId=server1-dbhistory, groupId=server1-dbhistory] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2020-03-29 10:46:36,238] WARN [Consumer clientId=server1-dbhistory, groupId=server1-dbhistory] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)

До истечения времени ожидания:

[2020-03-29 10:46:38,664] ERROR WorkerSourceTask{id=inventory-connector-0} Task threw an uncaught and unrecoverable exception (org.apache.kafka.connect.runtime.WorkerTask)
org.apache.kafka.common.errors.TimeoutException: Failed to get offsets by times in 60000ms

Самое смешное, что я вижу, что моя конфигурация успешно получена в начале журнал (ищите broker:9092):

[2020-03-29 10:45:38,618] INFO    database.history.kafka.bootstrap.servers = broker:9092 (io.debezium.connector.common.BaseSourceTask)

...

[2020-03-29 10:45:38,655] INFO ConsumerConfig values:
        allow.auto.create.topics = true
        auto.commit.interval.ms = 5000
        auto.offset.reset = earliest
        bootstrap.servers = [broker:9092]
        check.crcs = true
        client.dns.lookup = default
        client.id = server1-dbhistory
        client.rack =
        connections.max.idle.ms = 540000
        default.api.timeout.ms = 60000
        enable.auto.commit = false
        exclude.internal.topics = true
        fetch.max.bytes = 52428800
        fetch.max.wait.ms = 500
        fetch.min.bytes = 1
        group.id = server1-dbhistory
        group.instance.id = null

Это мой файл конфигурации: register-sqlserver.json:

{
 "name": "inventory-connector",
 "config": {
     "connector.class" : "io.debezium.connector.sqlserver.SqlServerConnector",
     "tasks.max" : "1",
     "database.server.name" : "server1",
     "database.hostname" : "sqlserver_1",
     "database.port" : "1433",
     "database.user" : "sa",
     "database.password" : "Password!",
     "database.dbname" : "testDB",
     "database.history.kafka.bootstrap.servers" : "broker:9092",
     "database.history.kafka.topic": "schema-changes.inventory"
     }
 }  

Я добавляю соединитель через хост-машину следующим образом (как в руководстве):

curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" http://localhost:8083/connectors/ -d @register-sqlserver.json  

Журналы, которые я показал, являются выводом connect контейнерных журналов.

Других localhost слов нет в моих полных журналах, поэтому не стоит беспокоиться о других конфигурациях со значением по умолчанию localhost, которые я мог бы пропустить в качестве ведущего.

Буду признателен за любую помощь:)

1 Ответ

1 голос
/ 29 марта 2020

Проблема до рекламируемых слушателей .

Вы подключаетесь к брокеру по 9092, что для конфигурации для слушателя, который объявляет свой хост как localhost

KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092

Это означает что клиент (в данном случае Debezium) сначала подключится к указанному вами серверу bootstrap (broker:9092), но брокер вернет клиенту объявленный хост (localhost) - и клиент затем попробуйте подключиться к этому. Поскольку они находятся в отдельных экземплярах, localhost для Debeziu, коннектор не является посредником, и соединение не устанавливается.

Ссылка: https://rmoff.net/2018/08/02/kafka-listeners-explained/

Решение:

Использовать порт 29092, который в соответствии с вышеуказанным конфигом связан на объявленный хост broker, который правильно разрешит из контейнера Debezium

"database.history.kafka.bootstrap.servers" : "broker:29092"
...