services:
kafka-1:
image: ${KAFKA_IMAGE:-apache/kafka:4.3.0}
container_name: kafka-1
hostname: kafka-1
ports:
- "29093:9093" - "29094:9094" networks:
- kafka-cluster
environment:
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_LISTENERS: INTERNAL://0.0.0.0:9092,EXTERNAL://0.0.0.0:9093,CONTROLLER://0.0.0.0:9094
KAFKA_ADVERTISED_LISTENERS: EXTERNAL://127.0.0.1:29093,INTERNAL://kafka-1:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka-1:9094,2@kafka-2:9094,3@kafka-3:9094
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_GROUP_COORDINATOR_REBALANCE_PROTOCOLS: classic
KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
CLUSTER_ID: MkU3OEVBNTcwNTJENDM2Qk
healthcheck:
test: ["CMD", "kafka-broker-api-versions.sh", "--bootstrap-server", "127.0.0.1:9092"]
interval: 5s
timeout: 10s
retries: 30
start_period: 30s
kafka-2:
image: ${KAFKA_IMAGE:-apache/kafka:4.3.0}
container_name: kafka-2
hostname: kafka-2
ports:
- "29095:9093" - "29096:9094" networks:
- kafka-cluster
environment:
KAFKA_NODE_ID: 2
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_LISTENERS: INTERNAL://0.0.0.0:9092,EXTERNAL://0.0.0.0:9093,CONTROLLER://0.0.0.0:9094
KAFKA_ADVERTISED_LISTENERS: EXTERNAL://127.0.0.1:29095,INTERNAL://kafka-2:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka-1:9094,2@kafka-2:9094,3@kafka-3:9094
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_GROUP_COORDINATOR_REBALANCE_PROTOCOLS: classic
KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
CLUSTER_ID: MkU3OEVBNTcwNTJENDM2Qk
depends_on:
kafka-1:
condition: service_started
healthcheck:
test: ["CMD", "kafka-broker-api-versions.sh", "--bootstrap-server", "127.0.0.1:9092"]
interval: 5s
timeout: 10s
retries: 30
start_period: 30s
kafka-3:
image: ${KAFKA_IMAGE:-apache/kafka:4.3.0}
container_name: kafka-3
hostname: kafka-3
ports:
- "29097:9093" - "29098:9094" networks:
- kafka-cluster
environment:
KAFKA_NODE_ID: 3
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_LISTENERS: INTERNAL://0.0.0.0:9092,EXTERNAL://0.0.0.0:9093,CONTROLLER://0.0.0.0:9094
KAFKA_ADVERTISED_LISTENERS: EXTERNAL://127.0.0.1:29097,INTERNAL://kafka-3:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka-1:9094,2@kafka-2:9094,3@kafka-3:9094
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_GROUP_COORDINATOR_REBALANCE_PROTOCOLS: classic
KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
CLUSTER_ID: MkU3OEVBNTcwNTJENDM2Qk
depends_on:
kafka-2:
condition: service_started
healthcheck:
test: ["CMD", "kafka-broker-api-versions.sh", "--bootstrap-server", "127.0.0.1:9092"]
interval: 5s
timeout: 10s
retries: 30
start_period: 30s
networks:
kafka-cluster:
driver: bridge