Налада ўласцівасці KAFKA_ADVERTISED_LISTENERS на аснове Debezium Kafka ігнаруецца

У мяне ёсць Swarm на аснове Docker Compose са службай Zookeeper, якая запускаецца нармальна, але служба Kafka не можа запусціцца.

Ён працягвае выкарыстоўваць уласцівасць па змаўчанні KAFKA_ADVERTISED_LISTENERS :

debezium_kafka.1.5hhrqfp5kqts@stephane-pc    | Using ZOOKEEPER_CONNECT=zookeeper:2181
debezium_kafka.1.5hhrqfp5kqts@stephane-pc    | Using KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.0.83.239:9092

І, вядома, ён не можа знайсці слухачоў, указаных на карце:

debezium_kafka.1.5hhrqfp5kqts@stephane-pc    | java.lang.IllegalArgumentException: requirement failed: inter.broker.listener.name must be a listener name defined in advertised.listeners. The valid options based on currently configured listeners are PLAINTEXT

Мой файл docker-compose-dev.yml змяшчае:

  kafka:
    image: debezium/kafka:1.2
    deploy:
      mode: global
    ports:
      - "9094:9094"
      - "9095:9095"
    networks:
      common:
    volumes:
      - "~/dev/docker/projects/debezium/volumes/kafka/data:/kafka/data"
      - "~/dev/docker/projects/debezium/volumes/kafka/logs:/kafka/logs"
    environment:
      ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: FROM_DOCKER_NETWORK://kafka:9092,FROM_HOST://kafka:9094
      KAFKA_ADVERTISED_LISTENERS: FROM_DOCKER_NETWORK://kafka:9092,FROM_HOST://localhost:9094
      KAFKA_ALLOW_PLAINTEXT_LISTENER: "yes"
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,FROM_DOCKER_NETWORK:PLAINTEXT,FROM_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: FROM_DOCKER_NETWORK
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
0
задан 20 October 2020 в 11:04
1 ответ

Я что-то делал неправильно, указав жестко закодированное имя хоста в свойстве KAFKA_LISTENERS:

KAFKA_LISTENERS: FROM_DOCKER_NETWORK://kafka:9092,FROM_HOST://kafka:9094

После замены имени хоста kafka на IP-адрес 0.0.0.0, как в:

KAFKA_LISTENERS: FROM_DOCKER_NETWORK://0.0.0.0:9092,FROM_HOST://0.0.0.0:9094

проблема исчезла, и служба Kafka запустилась.

Обратите внимание, что объявленные прослушиватели сохраняют имя контейнера для доступа к службе Kafka из другого контейнера и имя localhost для доступа к службе Kafka с хоста Docker:

KAFKA_ADVERTISED_LISTENERS: FROM_DOCKER_NETWORK://kafka:9092,FROM_HOST://localhost:9094

Как объяснено в это руководство значение 0.0.0.0 означает, что прослушиватель прослушивает все интерфейсы. И это руководство говорит о том же.

0
ответ дан 6 November 2020 в 13:51

Теги

Похожие вопросы