How to run KSQLDB along with Kafka server using docker compose

61 Views Asked by At

I'm trying to run KSQLDB along with Kafka, but KSQLDB refuses to connect to my Kafka Server.

kafka1-kafka-1   | [2024-02-19 17:08:15,202] INFO [BrokerLifecycleManager id=1] Unable to register broker 1 because the controller returned error DUPLICATE_BROKER_REGISTRATION (kafka.server.BrokerLifecycleManager)
kafka1-ksqldb-1  | [2024-02-19 17:08:16,320] INFO [AdminClient clientId=adminclient-1] Node -1 disconnected. (org.apache.kafka.clients.NetworkClient)
kafka1-ksqldb-1  | [2024-02-19 17:08:16,321] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (kafka/172.18.0.2:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
kafka1-kafka-1   | [2024-02-19 17:08:16,809] INFO [QuorumController id=1] registerBroker: failed with DuplicateBrokerRegistrationException in 293 us. Reason: Another broker is registered with that broker id. (org.apache.kafka.controller.QuorumController)
kafka1-kafka-1   | [2024-02-19 17:08:16,813] INFO [BrokerLifecycleManager id=1] Unable to register broker 1 because the controller returned error DUPLICATE_BROKER_REGISTRATION (kafka.server.BrokerLifecycleManager)

My docker-compose.yaml looks like this:

version: "3.1"
services:
  kafka:
    image: confluentinc/confluent-local:latest
    ports:
      - "9092:9092"
      - "8082:8082"
      - "29093:29093"
  ksqldb:
    image: confluentinc/cp-ksqldb-server:7.5.3
    environment:
      - KSQL_BOOTSTRAP_SERVERS=kafka:9092
      - KSQL_KSQL_SERVICE_ID=ksqldb_
      - KSQL_KSQL_QUERIES_FILE=/opt/data/queries.sql
      - KSQL_LISTENERS=http://0.0.0.0:8088/
    depends_on:
      - kafka

What I need is basically a docker-compose file that can run the two images and let me experiment with tables and streams.

1

There are 1 best solutions below

5
OneCricketeer On BEST ANSWER

You're missing some environment variables on the Kafka container

KAFKA_LISTENERS: "PLAINTEXT://0.0.0.0:29092,CONTROLLER://kafka:29093,PLAINTEXT_HOST://0.0.0.0:9092" 
KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092"

It defaults to localhost, so no other containers can connect

And you need KSQL_BOOTSTRAP_SERVERS=kafka:29092 on ksql (change the port)