Настройка слушателей Kafka, развернутого в Docker
Сразу оговорюсь, что и kafka
и Docker
технологии для меня новые.
Мне нужна помощь, чтобы разобраться с настройкой слушателей kafka
, работающего в Docker
.
docker-compose.yml:
version: '3.5'
networks:
kafka_network:
name: kafka_network
driver: bridge
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.4.4
container_name: zookeeper
networks:
- kafka_network
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- "2181:2181"
restart: on-failure
kafka:
image: confluentinc/cp-kafka:7.4.4
container_name: kafka
networks:
- kafka_network
depends_on:
- zookeeper
ports:
- "29092:29092"
restart: on-failure
environment:
KAFKA_NODE_ID: 1
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_LOCAL:PLAINTEXT, LISTENER_EXTERNAL:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_LOCAL
KAFKA_ADVERTISED_LISTENERS: LISTENER_LOCAL://kafka:9092, LISTENER_EXTERNAL://localhost:29092
KAFKA_LISTENERS: LISTENER_LOCAL://kafka:9092, LISTENER_EXTERNAL://kafka:29092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
Данный файл:
Запускает Kafka вместе с Zookeeper.
Создаёт сеть докера с именем
kafka_network
, драйверbridge
.Настраивает сеть так, что:
- c машины-хоста
kafka
доступен по адресуlocalhost:29092
- для доступа же из докера (из другого контейнера), сперва необходимо присоединиться к созданной
kafka_network
.
docker run -d --network kafka_network --name <myCustomName> <imageId>
Далееkafka
для запущенного "рядом" контейнера будет доступен по адресуkafka:9092
([container-name]:[port])
- c машины-хоста
Не понятен момент с настройкой LISTENER_EXTERNAL
.
В моём представлении он в KAFKA_LISTENERS
должен быть такой - LISTENER_EXTERNAL://localhost:29092
, вместо LISTENER_EXTERNAL://kafka:29092
.
Но с такой настройкой теряется доступ с машины хоста.
Я, проверял этот случай через kafkacat
.
kcat -b localhost:29092 -L
вывод
%6|1728055458.745|FAIL|rdkafka#producer-1| [thrd:localhost:29092/bootstrap]: localhost:29092/bootstrap: Disconnected while requesting ApiVersion: might be caused by incorrect security.protocol configuration (connecting to a SSL listener?) or broker version is < 0.10 (see api.version.request) (after 1ms in state APIVERSION_QUERY)
%6|1728055458.955|FAIL|rdkafka#producer-1| [thrd:localhost:29092/bootstrap]: localhost:29092/bootstrap: Disconnected while requesting ApiVersion: might be caused by incorrect security.protocol configuration (connecting to a SSL listener?) or broker version is < 0.10 (see api.version.request) (after 1ms in state APIVERSION_QUERY, 1 identical error(s) suppressed)
% ERROR: Failed to acquire metadata: Local: Broker transport failure (Are the brokers reachable? Also try increasing the metadata timeout with -m <timeout>?)
Наверное, в этом случае я чего-то не понимаю про работу сети Docker
?
И как тогда настроить, чтобы kafka
был доступен, если он расположен на удаленном хосте?