blob: 3d233966e7b84a4ef281d14aac7f1a15496079b6 [file] [log] [blame]
Abhay Kumara61c5222025-11-10 07:32:50 +00001x-zookeeper-base: &zookeeper-base
2 image: 'docker.io/library/zookeeper:3.7.2'
3 init: true
4 restart: always
5 profiles:
6 - zookeeper
7 environment: &zookeeper-base-env
8 ZOO_SERVERS: 'server.1=zookeeper-1:2888:3888 server.2=zookeeper-2:2888:3888 server.3=zookeeper-3:2888:3888'
9 ZOO_CFG_EXTRA: 'clientPort=2181 peerPort=2888 leaderPort=3888'
10 ZOO_INIT_LIMIT: '10'
11 ZOO_SYNC_LIMIT: '5'
12 ZOO_MAX_CLIENT_CNXNS: '0'
13 ZOO_4LW_COMMANDS_WHITELIST: 'mntr,conf,ruok'
14
15x-kafka-base: &kafka-base
16 image: 'sarama/fv-kafka-${KAFKA_VERSION:-3.9.1}'
17 init: true
18 build:
19 context: .
20 dockerfile: Dockerfile.kafka
21 args:
22 KAFKA_VERSION: ${KAFKA_VERSION:-3.9.1}
23 SCALA_VERSION: ${SCALA_VERSION:-2.13}
24 depends_on:
25 - toxiproxy
26 restart: always
27 environment: &kafka-base-env
28 KAFKA_VERSION: ${KAFKA_VERSION:-3.9.1}
29 KAFKA_CFG_DEFAULT_REPLICATION_FACTOR: '2'
30 KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR: '2'
31 KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: '2'
32 KAFKA_CFG_ZOOKEEPER_SESSION_TIMEOUT_MS: '6000'
33 KAFKA_CFG_ZOOKEEPER_CONNECTION_TIMEOUT_MS: '6000'
34 KAFKA_CFG_REPLICA_SELECTOR_CLASS: 'org.apache.kafka.common.replica.RackAwareReplicaSelector'
35 KAFKA_CFG_DELETE_TOPIC_ENABLE: 'true'
36 KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: 'false'
37 KAFKA_CFG_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
38 KAFKA_JVM_PERFORMANCE_OPTS: "-XX:+IgnoreUnrecognizedVMOptions"
39 KAFKA_CFG_INTER_BROKER_LISTENER_NAME: 'LISTENER_INTERNAL'
40 KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: 'LISTENER_INTERNAL:PLAINTEXT,LISTENER_LOCAL:PLAINTEXT,CONTROLLER:PLAINTEXT'
41 # ZooKeeper-specific
42 KAFKA_CFG_ZOOKEEPER_CONNECT: 'zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181'
43 # KRaft-specific
44 KAFKA_CFG_PROCESS_ROLES: 'broker,controller'
45 KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: '1@kafka-1:9093,2@kafka-2:9093,3@kafka-3:9093,4@kafka-4:9093,5@kafka-5:9093'
46 KAFKA_CFG_CONTROLLER_LISTENER_NAMES: 'CONTROLLER'
47 KAFKA_CFG_CLUSTER_ID: 'cDZEekk4T3hTNGVlNzB3LUtUbkxaQQo='
48
49services:
50 zookeeper-1:
51 <<: *zookeeper-base
52 container_name: 'zookeeper-1'
53 environment:
54 <<: *zookeeper-base-env
55 ZOO_MY_ID: '1'
56
57 zookeeper-2:
58 <<: *zookeeper-base
59 container_name: 'zookeeper-2'
60 environment:
61 <<: *zookeeper-base-env
62 ZOO_MY_ID: '2'
63
64 zookeeper-3:
65 <<: *zookeeper-base
66 container_name: 'zookeeper-3'
67 environment:
68 <<: *zookeeper-base-env
69 ZOO_MY_ID: '3'
70
71 kafka-1:
72 <<: *kafka-base
73 container_name: 'kafka-1'
74 healthcheck:
75 test: ['CMD', '/opt/kafka-${KAFKA_VERSION:-3.9.1}/bin/kafka-broker-api-versions.sh', '--bootstrap-server', 'kafka-1:9091']
76 interval: 15s
77 timeout: 15s
78 retries: 10
79 start_period: 360s
80 environment:
81 <<: *kafka-base-env
82 KAFKA_CFG_BROKER_ID: '1'
83 KAFKA_CFG_NODE_ID: '1'
84 KAFKA_CFG_BROKER_RACK: '1'
85 KAFKA_CFG_LISTENERS: 'LISTENER_INTERNAL://:9091,LISTENER_LOCAL://:29091,CONTROLLER://:9093'
86 KAFKA_CFG_ADVERTISED_LISTENERS: 'LISTENER_INTERNAL://kafka-1:9091,LISTENER_LOCAL://localhost:29091'
87
88 kafka-2:
89 <<: *kafka-base
90 container_name: 'kafka-2'
91 healthcheck:
92 test: ['CMD', '/opt/kafka-${KAFKA_VERSION:-3.9.1}/bin/kafka-broker-api-versions.sh', '--bootstrap-server', 'kafka-2:9091']
93 interval: 15s
94 timeout: 15s
95 retries: 10
96 start_period: 360s
97 environment:
98 <<: *kafka-base-env
99 KAFKA_CFG_BROKER_ID: '2'
100 KAFKA_CFG_NODE_ID: '2'
101 KAFKA_CFG_BROKER_RACK: '2'
102 KAFKA_CFG_LISTENERS: 'LISTENER_INTERNAL://:9091,LISTENER_LOCAL://:29092,CONTROLLER://:9093'
103 KAFKA_CFG_ADVERTISED_LISTENERS: 'LISTENER_INTERNAL://kafka-2:9091,LISTENER_LOCAL://localhost:29092'
104
105 kafka-3:
106 <<: *kafka-base
107 container_name: 'kafka-3'
108 healthcheck:
109 test: ['CMD', '/opt/kafka-${KAFKA_VERSION:-3.9.1}/bin/kafka-broker-api-versions.sh', '--bootstrap-server', 'kafka-3:9091']
110 interval: 15s
111 timeout: 15s
112 retries: 10
113 start_period: 360s
114 environment:
115 <<: *kafka-base-env
116 KAFKA_CFG_BROKER_ID: '3'
117 KAFKA_CFG_NODE_ID: '3'
118 KAFKA_CFG_BROKER_RACK: '3'
119 KAFKA_CFG_LISTENERS: 'LISTENER_INTERNAL://:9091,LISTENER_LOCAL://:29093,CONTROLLER://:9093'
120 KAFKA_CFG_ADVERTISED_LISTENERS: 'LISTENER_INTERNAL://kafka-3:9091,LISTENER_LOCAL://localhost:29093'
121
122 kafka-4:
123 <<: *kafka-base
124 container_name: 'kafka-4'
125 healthcheck:
126 test: ['CMD', '/opt/kafka-${KAFKA_VERSION:-3.9.1}/bin/kafka-broker-api-versions.sh', '--bootstrap-server', 'kafka-4:9091']
127 interval: 15s
128 timeout: 15s
129 retries: 10
130 start_period: 360s
131 environment:
132 <<: *kafka-base-env
133 KAFKA_CFG_BROKER_ID: '4'
134 KAFKA_CFG_NODE_ID: '4'
135 KAFKA_CFG_BROKER_RACK: '4'
136 KAFKA_CFG_LISTENERS: 'LISTENER_INTERNAL://:9091,LISTENER_LOCAL://:29094,CONTROLLER://:9093'
137 KAFKA_CFG_ADVERTISED_LISTENERS: 'LISTENER_INTERNAL://kafka-4:9091,LISTENER_LOCAL://localhost:29094'
138
139 kafka-5:
140 <<: *kafka-base
141 container_name: 'kafka-5'
142 healthcheck:
143 test: ['CMD', '/opt/kafka-${KAFKA_VERSION:-3.9.1}/bin/kafka-broker-api-versions.sh', '--bootstrap-server', 'kafka-5:9091']
144 interval: 15s
145 timeout: 15s
146 retries: 10
147 start_period: 360s
148 environment:
149 <<: *kafka-base-env
150 KAFKA_CFG_BROKER_ID: '5'
151 KAFKA_CFG_NODE_ID: '5'
152 KAFKA_CFG_BROKER_RACK: '5'
153 KAFKA_CFG_LISTENERS: 'LISTENER_INTERNAL://:9091,LISTENER_LOCAL://:29095,CONTROLLER://:9093'
154 KAFKA_CFG_ADVERTISED_LISTENERS: 'LISTENER_INTERNAL://kafka-5:9091,LISTENER_LOCAL://localhost:29095'
155
156 toxiproxy:
157 container_name: 'toxiproxy'
158 image: 'ghcr.io/shopify/toxiproxy:2.12.0'
159 init: true
160 healthcheck:
161 test: ['CMD', '/toxiproxy-cli', 'l']
162 interval: 15s
163 timeout: 15s
164 retries: 3
165 start_period: 30s
166 ports:
167 # The tests themselves actually start the proxies on these ports
168 - '29091:29091'
169 - '29092:29092'
170 - '29093:29093'
171 - '29094:29094'
172 - '29095:29095'
173
174 # This is the toxiproxy API port
175 - '8474:8474'