Цифровой сад — общедоступная персональная база знаний

Лупа для поиска
  • Свежие правки
  • Карта сайта
  • Как запустить несколько экземпляров Kafka в Docker Compose

    Данная конфигурация позволяет быстро

    Создаём файл конфигурации Docker Compose docker-compose-dev.yml со следующим содержимым.

    name: kafka-dev
    
    services:
    
      # Координатор распределённых систем, на основе БД типа "ключ - значение"
      # https://hub.docker.com/r/bitnami/zookeeper
      zookeeper:
        container_name: clusterization-dev-zookeeper
        image: bitnami/zookeeper:latest
        ports:
          - '2181:2181'
        environment:
          - ALLOW_ANONYMOUS_LOGIN=yes
          - ZOO_HEAP_SIZE=256
    
      # Распределённый брокер сообщений
      # https://hub.docker.com/r/bitnami/kafka
      # https://github.com/bitnami/containers/blob/9e0a9854428d743243663294f52d43f0fe43397e/bitnami/kafka/README.md
      kafka0:
        # &kafka-image - синоним для образа
        image: &kafka-image bitnami/kafka:2.8.1
        ports:
          # Порт для внутреннего использования
          - '9092'
          # Порт для внешнего использования
          - '9090:9090'
        environment:
          - ALLOW_PLAINTEXT_LISTENER=yes
          # Определяет протоколы INTERNAL и EXTERNAL для внутреннего и внешнего использования соответственно
          - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
          - KAFKA_CFG_LISTENERS=INTERNAL://:9092,EXTERNAL://:9090
          - KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka0:9092,EXTERNAL://localhost:9090
          - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
          - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
          - KAFKA_HEAP_OPTS=-Xmx256m -Xms256m
        depends_on:
          - zookeeper
      kafka1:
        # Ссылка на синоним образа
        image: *kafka-image
        ports:
          # Порт для внутреннего использования
          - '9092'
          # Порт для внешнего использования
          - '9091:9091'
        environment:
          - ALLOW_PLAINTEXT_LISTENER=yes
          # Определяет протоколы INTERNAL и EXTERNAL для внутреннего и внешнего использования соответственно
          - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
          - KAFKA_CFG_LISTENERS=INTERNAL://:9092,EXTERNAL://:9091
          - KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka1:9092,EXTERNAL://localhost:9091
          - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
          - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
          - KAFKA_HEAP_OPTS=-Xmx256m -Xms256m
        depends_on:
          - zookeeper
    
      kafka-init:
        # Ссылка на синоним образа
        image: *kafka-image
        working_dir: /opt/bitnami/kafka/bin
        entrypoint: [ '/bin/sh', '-c' ]
        depends_on:
          - kafka0
          - kafka1
        # Создаёт два топика
        command: |
          "
          kafka-topics.sh --bootstrap-server=kafka0:9092,kafka1:9092 --create --if-not-exists --topic=topic1 --partitions=2
          kafka-topics.sh --bootstrap-server=kafka0:9092,kafka1:9092 --create --if-not-exists --topic=topic2 --partitions=2
          "
    

    Запускаем Docker Compose.

    docker compose --file=docker-compose-dev.yml --project-name=kafka-dev up --detach

    Далее конфигурируем наши приложения используя строку подключения Kafka, которая может двух видов:

    1. kafka0:9092,kafka1:9092 - если обращение происходит внутри: из сервиса или сети описанных в том же проекте Docker Compose; #уточнить
    2. localhost:9090,localhost:9091 - если обращение происходит извне.