127 lines
3.9 KiB
YAML
127 lines
3.9 KiB
YAML
x-defaults: &defaults
|
|
restart: unless-stopped
|
|
logging:
|
|
driver: json-file
|
|
options:
|
|
max-size: 100m
|
|
max-file: "3"
|
|
|
|
services:
|
|
# Zookeeper for Kafka coordination
|
|
zookeeper:
|
|
<<: *defaults
|
|
image: ${GLOBAL_REGISTRY:-}confluentinc/cp-zookeeper:${KAFKA_VERSION:-7.8.0}
|
|
ports:
|
|
- "${ZOOKEEPER_CLIENT_PORT_OVERRIDE:-2181}:2181"
|
|
volumes:
|
|
- zookeeper_data:/var/lib/zookeeper/data
|
|
- zookeeper_log:/var/lib/zookeeper/log
|
|
environment:
|
|
- TZ=${TZ:-UTC}
|
|
- ZOOKEEPER_CLIENT_PORT=2181
|
|
- ZOOKEEPER_TICK_TIME=2000
|
|
- ZOOKEEPER_SYNC_LIMIT=5
|
|
- ZOOKEEPER_INIT_LIMIT=10
|
|
- ZOOKEEPER_MAX_CLIENT_CNXNS=60
|
|
- ZOOKEEPER_AUTOPURGE_SNAP_RETAIN_COUNT=3
|
|
- ZOOKEEPER_AUTOPURGE_PURGE_INTERVAL=24
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: ${ZOOKEEPER_CPU_LIMIT:-1.00}
|
|
memory: ${ZOOKEEPER_MEMORY_LIMIT:-1G}
|
|
reservations:
|
|
cpus: ${ZOOKEEPER_CPU_RESERVATION:-0.25}
|
|
memory: ${ZOOKEEPER_MEMORY_RESERVATION:-256M}
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "echo ruok | nc localhost 2181 | grep imok"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 10s
|
|
|
|
# Kafka broker
|
|
kafka:
|
|
<<: *defaults
|
|
image: ${GLOBAL_REGISTRY:-}confluentinc/cp-kafka:${KAFKA_VERSION:-7.8.0}
|
|
depends_on:
|
|
zookeeper:
|
|
condition: service_healthy
|
|
ports:
|
|
- "${KAFKA_BROKER_PORT_OVERRIDE:-9092}:9092"
|
|
- "${KAFKA_JMX_PORT_OVERRIDE:-9999}:9999"
|
|
volumes:
|
|
- kafka_data:/var/lib/kafka/data
|
|
environment:
|
|
- TZ=${TZ:-UTC}
|
|
- KAFKA_BROKER_ID=1
|
|
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
|
|
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092
|
|
- KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT
|
|
- KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT
|
|
- KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1
|
|
- KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1
|
|
- KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1
|
|
- KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS=0
|
|
- KAFKA_NUM_PARTITIONS=${KAFKA_NUM_PARTITIONS:-3}
|
|
- KAFKA_DEFAULT_REPLICATION_FACTOR=${KAFKA_DEFAULT_REPLICATION_FACTOR:-1}
|
|
- KAFKA_AUTO_CREATE_TOPICS_ENABLE=${KAFKA_AUTO_CREATE_TOPICS_ENABLE:-true}
|
|
- KAFKA_DELETE_TOPIC_ENABLE=${KAFKA_DELETE_TOPIC_ENABLE:-true}
|
|
- KAFKA_LOG_RETENTION_HOURS=${KAFKA_LOG_RETENTION_HOURS:-168}
|
|
- KAFKA_LOG_SEGMENT_BYTES=${KAFKA_LOG_SEGMENT_BYTES:-1073741824}
|
|
- KAFKA_LOG_RETENTION_CHECK_INTERVAL_MS=300000
|
|
- KAFKA_JMX_PORT=9999
|
|
- KAFKA_JMX_HOSTNAME=localhost
|
|
- KAFKA_HEAP_OPTS=${KAFKA_HEAP_OPTS:--Xmx1G -Xms1G}
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: ${KAFKA_CPU_LIMIT:-2.00}
|
|
memory: ${KAFKA_MEMORY_LIMIT:-2G}
|
|
reservations:
|
|
cpus: ${KAFKA_CPU_RESERVATION:-0.50}
|
|
memory: ${KAFKA_MEMORY_RESERVATION:-1G}
|
|
healthcheck:
|
|
test:
|
|
[
|
|
"CMD-SHELL",
|
|
"kafka-broker-api-versions --bootstrap-server localhost:9092",
|
|
]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
start_period: 60s
|
|
|
|
# Kafka UI (optional)
|
|
kafka-ui:
|
|
<<: *defaults
|
|
image: ${GLOBAL_REGISTRY:-}provectuslabs/kafka-ui:${KAFKA_UI_VERSION:-latest}
|
|
profiles:
|
|
- ui
|
|
depends_on:
|
|
kafka:
|
|
condition: service_healthy
|
|
zookeeper:
|
|
condition: service_healthy
|
|
ports:
|
|
- "${KAFKA_UI_PORT_OVERRIDE:-8080}:8080"
|
|
environment:
|
|
- TZ=${TZ:-UTC}
|
|
- KAFKA_CLUSTERS_0_NAME=local
|
|
- KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092
|
|
- KAFKA_CLUSTERS_0_ZOOKEEPER=zookeeper:2181
|
|
- KAFKA_CLUSTERS_0_READONLY=${KAFKA_UI_READONLY:-false}
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: ${KAFKA_UI_CPU_LIMIT:-0.50}
|
|
memory: ${KAFKA_UI_MEMORY_LIMIT:-512M}
|
|
reservations:
|
|
cpus: ${KAFKA_UI_CPU_RESERVATION:-0.10}
|
|
memory: ${KAFKA_UI_MEMORY_RESERVATION:-128M}
|
|
|
|
volumes:
|
|
zookeeper_data:
|
|
zookeeper_log:
|
|
kafka_data:
|