
version: "3.7"

networks:
  kafka-net:
    name: kafka-net

services:
  kafka-provisioning:
    container_name: kafka-provisioning
    networks:
      - kafka-net
    image: docker.io/bitnami/kafka:3.4.0
    env_file:
      - docker.env
    depends_on:
      - kafka
    entrypoint: [ '/bin/sh', '-c' ]
    command: |
      "
      # blocks until kafka is reachable
      kafka-topics.sh --bootstrap-server kafka:29092 --list
      echo -e 'Creating kafka topics'
      kafka-topics.sh --bootstrap-server kafka:29092 --create --if-not-exists --topic test --replication-factor $$KAFKA_REPLICATION_FACTOR --partitions $$KAFKA_PARTITIONS_NUM
      echo -e 'Successfully created the following topics:'
      kafka-topics.sh --bootstrap-server kafka:29092 --list
      "
    profiles:
      - provisioning
      - all

  kafka:
    networks:
      - kafka-net
    image: docker.io/bitnami/kafka:3.5
    # image: docker.io/bitnami/kafka:3.4.0
    container_name: kafka
    ports:
      - "9092:9092"
    environment:
      # BITNAMI_DEBUG: "yes"
      ALLOW_PLAINTEXT_LISTENER: "yes"
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_CFG_LISTENERS: CONTROLLER://:9093,LISTENER_DOCKER://:29092,LISTENER_EXTERN://:9092
      KAFKA_CFG_ADVERTISED_LISTENERS: LISTENER_DOCKER://kafka:29092,LISTENER_EXTERN://localhost:9092
      KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,LISTENER_DOCKER:PLAINTEXT,LISTENER_EXTERN:PLAINTEXT
      KAFKA_CFG_INTER_BROKER_LISTENER_NAME: LISTENER_DOCKER
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_CFG_MESSAGE_MAX_BYTES: 200000000
      KAFKA_CFG_NODE_ID: 1
      KAFKA_CFG_PROCESS_ROLES: broker,controller
      KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 1@127.0.0.1:9093
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
      KAFKA_ENABLE_KRAFT: "true"
    healthcheck:
      test: ["CMD" ,"/opt/bitnami/kafka/bin/kafka-broker-api-versions.sh","--bootstrap-server","kafka:29092"]
      timeout: 20s
      retries: 10
      start_period: 40s
      interval: 30s
    profiles:
      - kafka
      - all

  ## Debug utilities
  kafka-console:
    image: docker.redpanda.com/redpandadata/console:latest
    deploy:
      replicas: 1
    restart: on-failure
    hostname: kafka-console
    ports:
    - "9080:8080"
    networks:
      - kafka-net
    environment:
      - KAFKA_BROKERS=kafka:29092
    depends_on:
      - kafka
    profiles:
      - debug
      - all
