Как запустить несколько экземпляров Kafka в Docker Compose
Данная конфигурация позволяет быстро
- запустить два экземпляра Kafka
kafka0
иkafka1
, - а также создать два топика
topic1
иtopic2
, если таковых ещё не существует.
Создаём файл конфигурации 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, которая может двух видов:
kafka0:9092,kafka1:9092
- если обращение происходит внутри: из сервиса или сети описанных в том же проекте Docker Compose; #уточнитьlocalhost:9090,localhost:9091
- если обращение происходит извне.