Настройка слушателей 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])

Схематично: Общая схема

Не понятен момент с настройкой 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 был доступен, если он расположен на удаленном хосте?


Ответы (0 шт):