Search code examples
dockerapache-kafkadebezium

Connection to Kafka broker in Docker container fails


I'm trying to get a simple Debezium stack (with Docker Compose) running but the connection to the Kafka broker fails.

Here is my simplified docker-compose.yml:

version: "3"
services:
  zookeeper:
    image: debezium/zookeeper:1.6
    ports:
      - "2181:2181"
      - "2888:2888"
      - "3888:3888"
  kafka:
    image: debezium/kafka:1.6
    links:
      - zookeeper
    ports:
      - "9092:9092"
    environment:
      BROKER_ID: 1
      KAFKA_LISTENERS: LISTENER_BOB://kafka:29092,LISTENER_FRED://localhost:9092
      KAFKA_ADVERTISED_LISTENERS: LISTENER_BOB://kafka:29092,LISTENER_FRED://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_BOB:PLAINTEXT,LISTENER_FRED:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_BOB
      ZOOKEEPER_CONNECT: zookeeper:2181

As you may notice I added the listeners according to Kafka Listeners - Explained. But when I use kafkacat -b localhost:9092 -L to retrieve the broker's metadata the following error appears.

%6|1627623916.693|FAIL|rdkafka#producer-1| [thrd:localhost:9092/bootstrap]: localhost:9092/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 2ms in state APIVERSION_QUERY)
%6|1627623916.961|FAIL|rdkafka#producer-1| [thrd:localhost:9092/bootstrap]: localhost:9092/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 3ms in state APIVERSION_QUERY, 1 identical error(s) suppressed)
% ERROR: Failed to acquire metadata: Local: Broker transport failure

Kafka is even not able to start when I configure Kafka as Debezium suggests here.

2021-07-30 05:48:38,591 - WARN  [Controller-1-to-broker-1-send-thread:NetworkClient@780] - [Controller id=1, targetBrokerId=1] Connection to node 1 (/localhost:9092) could not be established. Broker may not be available.

What am I doing wrong? Thank you for any help in advance!


Solution

  • You've set a listener to only be local, not external.

    Change to

    KAFKA_LISTENERS: LISTENER_BOB://kafka:29092,LISTENER_FRED://0.0.0.0:9092