apache-kafka

Changing names of listeners in KAFKA_ADVERTISED_LISTENERS results in error for inter.broker.listener.name


Starting kafka with below configuration (fragment of docker compose file) works:

  kafka:
    image: confluentinc/cp-kafka:7.6.0
    depends_on:
      - zookeeper
    networks:
      - dev-net
    ports:
      - 9093:9093
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT_INTERNAL://kafka:9092,PLAINTEXT://localhost:9093
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"

  zookeeper:
    image: confluentinc/cp-zookeeper:7.6.0
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
    networks:
      - dev-net
    ports:
      - "2181:2181"

But after changing names of listeners like this:

KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: L1:PLAINTEXT,L2:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: L1://kafka:9092,L2://localhost:9093

I get the following error:

2025-07-21T12:30:52+02:00 [2025-07-21 10:30:52,029] ERROR Exiting Kafka due to fatal exception (kafka.Kafka$)
2025-07-21T12:30:52+02:00 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 L1,L2
2025-07-21T12:30:52+02:00   at scala.Predef$.require(Predef.scala:337)
2025-07-21T12:30:52+02:00   at kafka.server.KafkaConfig.validateValues(KafkaConfig.scala:2390)
2025-07-21T12:30:52+02:00   at kafka.server.KafkaConfig.<init>(KafkaConfig.scala:2233)
2025-07-21T12:30:52+02:00   at kafka.server.KafkaConfig.<init>(KafkaConfig.scala:1604)
2025-07-21T12:30:52+02:00   at kafka.Kafka$.buildServer(Kafka.scala:72)
2025-07-21T12:30:52+02:00   at kafka.Kafka$.main(Kafka.scala:91)
2025-07-21T12:30:52+02:00   at kafka.Kafka.main(Kafka.scala)

Why?


Solution

  • The default value for that config is PLAINTEXT (via security.inter.broker.protocol). It is expected to configure this when changing any listeners