В Kubernetes при развертывании Kafka Connect не удается подключиться к службе Kafka Broker (схема внутри) - PullRequest
1 голос
/ 03 июля 2019

Я новичок в Кубернетесе и довольно новичок в Кафке.

Моя цель - заставить мой экземпляр Kafka Connect правильно подключиться к моему брокеру, чтобы он мог получать сообщения.

Пока что я создал развертывание Zookeeper и обернул его в сервис. (Насколько я понимаю, это необходимо для того, чтобы брокер Kafka мог называть zookeeper просто «zookeeper: 2181».)

Minikube diagram

Я надеялся, что настройка экземпляра Kafka Connect будет такой же простой. Я поместил своего брокера в службу и указал ему экземпляр Connect по имени.

worker.properties

bootstrap.servers=kafka-broker:9092

Однако Connect аварийно завершает работу с этим исключением:

java.io.IOException: Can't resolve address: kafka-broker-57b74c6766-d9w5j:9092
    at org.apache.kafka.common.network.Selector.doConnect(Selector.java:235)
    at org.apache.kafka.common.network.Selector.connect(Selector.java:214)
    at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:864)
    at org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:265)
    at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.sendEligibleCalls(KafkaAdminClient.java:889)
    at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.run(KafkaAdminClient.java:1104)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.nio.channels.UnresolvedAddressException
    at java.base/sun.nio.ch.Net.checkAddress(Net.java:130)
    at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:675)
    at org.apache.kafka.common.network.Selector.doConnect(Selector.java:233)
    ... 6 more

Я создал альпийский модуль , как описано здесь , и я могу успешно curl -v kafka-broker:9092. Но это не тот адрес, который Connect пытается разрешить. Он пытается разрешить kafka-broker-57b74c6766-d9w5j:9092, что, как и Connect, я не могу разрешить. Я не уверен, почему Connect пытается связаться с конкретным модулем, поскольку именно эту проблему должны предотвращать службы Kubernetes (в любом случае, в моем ограниченном понимании).

Как заставить Connect правильно общаться с брокером?


Вот вывод kubectl describe svc kafka-broker:

Name:              kafka-broker
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          app=kafka-broker
Type:              ClusterIP
IP:                10.108.61.90
Port:              <unset>  9092/TCP
TargetPort:        9092/TCP
Endpoints:         172.17.0.7:9092
Session Affinity:  None
Events:            <none>

1 Ответ

0 голосов
/ 04 июля 2019

Когда вы подключаетесь к брокеру, он рекламирует себя как имя хоста.Взято из https://rmoff.net/2018/08/02/kafka-listeners-explained/:

tl; dr: вам нужно установить advertised.listeners (или KAFKA_ADVERTISED_LISTENERS, если вы используете изображения Docker) на внешний адрес (хост / IP), чтобы клиенты могли правильноподключиться к нему.В противном случае они попытаются соединиться с внутренним адресом хоста, и если это невозможно, возникнут проблемы.

В Kafka Broker установите для переменной KAFKA_ADVERTISED_LISTENERS env имя службы (kafka-broker) и он будет сообщать об этом клиентам, чтобы они подключались к правильному имени службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...