1313# See the License for the specific language governing permissions and
1414# limitations under the License.
1515
16- # Three -node AutoMQ cluster setup with MinIO for production-like environments
16+ # Single -node AutoMQ setup with MinIO for quick starts
1717version : " 3.8"
1818
19+ x-common-variables : &common-env
20+ KAFKA_S3_ACCESS_KEY : minioadmin
21+ KAFKA_S3_SECRET_KEY : minioadmin
22+ KAFKA_HEAP_OPTS : -Xms1g -Xmx4g -XX:MetaspaceSize=96m -XX:MaxDirectMemorySize=1G
23+ # Replace CLUSTER_ID with a unique base64 UUID using "bin/kafka-storage.sh random-uuid"
24+ CLUSTER_ID : 5XF4fHIOTfSIqkmje2KFlg
25+
1926services :
2027 # MinIO service for S3 storage
2128 minio :
22- container_name : " ${MINIO_DOCKER_NAME-minio}"
23- hostname : " ${MINIO_DOCKER_NAME-minio}"
24- image : minio/minio:RELEASE.2023-09-04T19-57-37Z
29+ container_name : " minio"
30+ image : minio/minio
31+ environment :
32+ MINIO_ROOT_USER : minioadmin
33+ MINIO_ROOT_PASSWORD : minioadmin
34+ MINIO_DOMAIN : minio
2535 ports :
2636 - " 9000:9000" # MinIO API
2737 - " 9001:9001" # MinIO Console
28- environment :
29- - MINIO_ROOT_USER=minioadmin
30- - MINIO_ROOT_PASSWORD=minioadmin
31- command : server /data --console-address ":9001"
32- volumes :
33- - minio_data:/data
38+ command : [ "server", "/data", "--console-address", ":9001" ]
3439 networks :
3540 automq_net :
36- ipv4_address : 10.6.0.2
3741 healthcheck :
38- test : ["CMD", "curl", "-f", "http://localhost :9000/minio/health/live"]
42+ test : [ "CMD", "curl", "-f", "http://minio :9000/minio/health/live" ]
3943 interval : 5s
4044 timeout : 5s
4145 retries : 3
4246
4347 # Create needed buckets
4448 mc :
45- container_name : " ${MC_DOCKER_NAME-mc}"
46- hostname : " ${MC_DOCKER_NAME-mc}"
47- image : minio/mc:RELEASE.2023-09-07T22-48-55Z
49+ container_name : " mc"
50+ image : minio/mc
4851 depends_on :
4952 minio :
5053 condition : service_healthy
5154 entrypoint : >
5255 /bin/sh -c "
53- /usr/bin/mc config host add myminio http://minio:9000 minioadmin minioadmin;
54- /usr/bin/mc mb myminio/automq-data;
55- /usr/bin/mc policy set public myminio/automq-data;
56- exit 0;
56+ until (/usr/bin/mc config host add minio http://minio:9000 minioadmin minioadmin) do echo '...waiting...' && sleep 1; done;
57+ /usr/bin/mc rm -r --force minio/automq-data;
58+ /usr/bin/mc rm -r --force minio/automq-ops;
59+ /usr/bin/mc mb minio/automq-data;
60+ /usr/bin/mc mb minio/automq-ops;
61+ /usr/bin/mc policy set public minio/automq-data;
62+ /usr/bin/mc policy set public minio/automq-ops;
63+ tail -f /dev/null
5764 "
5865 networks :
5966 - automq_net
6067
61- # Controller node 1 (first controller in the cluster)
62- controller1 :
63- container_name : " ${CONTROLLER1_DOCKER_NAME-controller1}"
64- hostname : " ${CONTROLLER1_DOCKER_NAME-controller1}"
65- stop_grace_period : 2m
68+ # Three nodes for AutoMQ cluster
69+ server1 :
70+ container_name : " automq-server1"
6671 image : automqinc/automq:latest
67- ports :
68- - " 9093:9093" # Controller API
72+ stop_grace_period : 1m
6973 environment :
70- - KAFKA_S3_ACCESS_KEY=minioadmin
71- - KAFKA_S3_SECRET_KEY=minioadmin
72- - KAFKA_HEAP_OPTS=-Xms1g -Xmx1g -XX:MetaspaceSize=96m -XX:MaxDirectMemorySize=1G
73- - KAFKA_CFG_LISTENERS=CONTROLLER://:9093
74- - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT
74+ << : *common-env
7575 command :
7676 - bash
7777 - -c
7878 - |
79- /opt/kafka/scripts/start.sh up --process.roles controller --node.id 0 --controller.quorum.voters 0@controller1:9093,1@controller2:9093,2@controller3:9093 --s3.data.buckets 0@s3://automq-data?region=us-east-1 --s3.ops.buckets 1@s3://automq-data?region=us-east-1 --s3.wal.path 0@s3://automq-data?region=us-east-1 --s3.endpoint http://10.6.0.2:9000 --s3.path-style-access true
79+ /opt/automq/kafka/bin/kafka-server-start.sh \
80+ /opt/automq/kafka/config/kraft/server.properties \
81+ --override cluster.id=$$CLUSTER_ID \
82+ --override node.id=0 \
83+ --override controller.quorum.voters=0@server1:9093,1@server2:9093,2@server3:9093 \
84+ --override controller.quorum.bootstrap.servers=server1:9093,server2:9093,server3:9093 \
85+ --override advertised.listeners=PLAINTEXT://server1:9092 \
86+ --override s3.data.buckets='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \
87+ --override s3.ops.buckets='1@s3://automq-ops?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \
88+ --override s3.wal.path='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true'
8089 networks :
8190 automq_net :
82- ipv4_address : 10.6.0.3
8391 depends_on :
8492 - minio
8593 - mc
8694
87- # Controller node 2
88- controller2 :
89- container_name : " ${CONTROLLER2_DOCKER_NAME-controller2}"
90- hostname : " ${CONTROLLER2_DOCKER_NAME-controller2}"
91- stop_grace_period : 2m
92- image : automqinc/automq:latest
93- ports :
94- - " 9094:9093" # Controller API (mapped to different port on host)
95- environment :
96- - KAFKA_S3_ACCESS_KEY=minioadmin
97- - KAFKA_S3_SECRET_KEY=minioadmin
98- - KAFKA_HEAP_OPTS=-Xms1g -Xmx1g -XX:MetaspaceSize=96m -XX:MaxDirectMemorySize=1G
99- - KAFKA_CFG_LISTENERS=CONTROLLER://:9093
100- - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT
101- command :
102- - bash
103- - -c
104- - |
105- /opt/kafka/scripts/start.sh up --process.roles controller --node.id 1 --controller.quorum.voters 0@controller1:9093,1@controller2:9093,2@controller3:9093 --s3.data.buckets 0@s3://automq-data?region=us-east-1 --s3.ops.buckets 1@s3://automq-data?region=us-east-1 --s3.wal.path 0@s3://automq-data?region=us-east-1 --s3.endpoint http://10.6.0.2:9000 --s3.path-style-access true
106- networks :
107- automq_net :
108- ipv4_address : 10.6.0.4
109- depends_on :
110- - controller1
111-
112- # Controller node 3
113- controller3 :
114- container_name : " ${CONTROLLER3_DOCKER_NAME-controller3}"
115- hostname : " ${CONTROLLER3_DOCKER_NAME-controller3}"
116- stop_grace_period : 2m
117- image : automqinc/automq:latest
118- ports :
119- - " 9095:9093" # Controller API (mapped to different port on host)
120- environment :
121- - KAFKA_S3_ACCESS_KEY=minioadmin
122- - KAFKA_S3_SECRET_KEY=minioadmin
123- - KAFKA_HEAP_OPTS=-Xms1g -Xmx1g -XX:MetaspaceSize=96m -XX:MaxDirectMemorySize=1G
124- - KAFKA_CFG_LISTENERS=CONTROLLER://:9093
125- - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT
126- command :
127- - bash
128- - -c
129- - |
130- /opt/kafka/scripts/start.sh up --process.roles controller --node.id 2 --controller.quorum.voters 0@controller1:9093,1@controller2:9093,2@controller3:9093 --s3.data.buckets 0@s3://automq-data?region=us-east-1 --s3.ops.buckets 1@s3://automq-data?region=us-east-1 --s3.wal.path 0@s3://automq-data?region=us-east-1 --s3.endpoint http://10.6.0.2:9000 --s3.path-style-access true
131- networks :
132- automq_net :
133- ipv4_address : 10.6.0.5
134- depends_on :
135- - controller2
136-
137- # Broker node 1
138- broker1 :
139- container_name : " ${BROKER1_DOCKER_NAME-broker1}"
140- hostname : " ${BROKER1_DOCKER_NAME-broker1}"
141- stop_grace_period : 2m
142- image : automqinc/automq:latest
143- ports :
144- - " 9092:9092" # Kafka API
145- environment :
146- - KAFKA_S3_ACCESS_KEY=minioadmin
147- - KAFKA_S3_SECRET_KEY=minioadmin
148- - KAFKA_HEAP_OPTS=-Xms1g -Xmx1g -XX:MetaspaceSize=96m -XX:MaxDirectMemorySize=1G
149- - KAFKA_CFG_AUTOBALANCER_REPORTER_NETWORK_IN_CAPACITY=5120
150- - KAFKA_CFG_AUTOBALANCER_REPORTER_NETWORK_OUT_CAPACITY=5120
151- - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
152- - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092
153- - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT
154- command :
155- - bash
156- - -c
157- - |
158- /opt/kafka/scripts/start.sh up --process.roles broker --node.id 3 --controller.quorum.voters 0@controller1:9093,1@controller2:9093,2@controller3:9093 --s3.data.buckets 0@s3://automq-data?region=us-east-1 --s3.ops.buckets 1@s3://automq-data?region=us-east-1 --s3.wal.path 0@s3://automq-data?region=us-east-1 --s3.endpoint http://10.6.0.2:9000 --s3.path-style-access true
159- networks :
160- automq_net :
161- ipv4_address : 10.6.0.6
162- depends_on :
163- - controller1
164- - controller2
165- - controller3
166-
167- # Broker node 2
168- broker2 :
169- container_name : " ${BROKER2_DOCKER_NAME-broker2}"
170- hostname : " ${BROKER2_DOCKER_NAME-broker2}"
171- stop_grace_period : 2m
95+ server2 :
96+ container_name : " automq-server2"
17297 image : automqinc/automq:latest
173- ports :
174- - " 9096:9092" # Kafka API (mapped to different port on host)
98+ stop_grace_period : 1m
17599 environment :
176- - KAFKA_S3_ACCESS_KEY=minioadmin
177- - KAFKA_S3_SECRET_KEY=minioadmin
178- - KAFKA_HEAP_OPTS=-Xms1g -Xmx1g -XX:MetaspaceSize=96m -XX:MaxDirectMemorySize=1G
179- - KAFKA_CFG_AUTOBALANCER_REPORTER_NETWORK_IN_CAPACITY=5120
180- - KAFKA_CFG_AUTOBALANCER_REPORTER_NETWORK_OUT_CAPACITY=5120
181- - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
182- - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9096
183- - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT
100+ << : *common-env
184101 command :
185102 - bash
186103 - -c
187104 - |
188- /opt/kafka/scripts/start.sh up --process.roles broker --node.id 4 --controller.quorum.voters 0@controller1:9093,1@controller2:9093,2@controller3:9093 --s3.data.buckets 0@s3://automq-data?region=us-east-1 --s3.ops.buckets 1@s3://automq-data?region=us-east-1 --s3.wal.path 0@s3://automq-data?region=us-east-1 --s3.endpoint http://10.6.0.2:9000 --s3.path-style-access true
105+ /opt/automq/kafka/bin/kafka-server-start.sh \
106+ /opt/automq/kafka/config/kraft/server.properties \
107+ --override cluster.id=$$CLUSTER_ID \
108+ --override node.id=1 \
109+ --override controller.quorum.voters=0@server1:9093,1@server2:9093,2@server3:9093 \
110+ --override controller.quorum.bootstrap.servers=server1:9093,server2:9093,server3:9093 \
111+ --override advertised.listeners=PLAINTEXT://server2:9092 \
112+ --override s3.data.buckets='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \
113+ --override s3.ops.buckets='1@s3://automq-ops?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \
114+ --override s3.wal.path='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true'
189115 networks :
190116 automq_net :
191- ipv4_address : 10.6.0.7
192117 depends_on :
193- - broker1
118+ - minio
119+ - mc
194120
195- # Broker node 3
196- broker3 :
197- container_name : " ${BROKER3_DOCKER_NAME-broker3}"
198- hostname : " ${BROKER3_DOCKER_NAME-broker3}"
199- stop_grace_period : 2m
121+ server3 :
122+ container_name : " automq-server3"
200123 image : automqinc/automq:latest
201- ports :
202- - " 9097:9092" # Kafka API (mapped to different port on host)
124+ stop_grace_period : 1m
203125 environment :
204- - KAFKA_S3_ACCESS_KEY=minioadmin
205- - KAFKA_S3_SECRET_KEY=minioadmin
206- - KAFKA_HEAP_OPTS=-Xms1g -Xmx1g -XX:MetaspaceSize=96m -XX:MaxDirectMemorySize=1G
207- - KAFKA_CFG_AUTOBALANCER_REPORTER_NETWORK_IN_CAPACITY=5120
208- - KAFKA_CFG_AUTOBALANCER_REPORTER_NETWORK_OUT_CAPACITY=5120
209- - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
210- - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9097
211- - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT
126+ << : *common-env
212127 command :
213128 - bash
214129 - -c
215130 - |
216- /opt/kafka/scripts/start.sh up --process.roles broker --node.id 5 --controller.quorum.voters 0@controller1:9093,1@controller2:9093,2@controller3:9093 --s3.data.buckets 0@s3://automq-data?region=us-east-1 --s3.ops.buckets 1@s3://automq-data?region=us-east-1 --s3.wal.path 0@s3://automq-data?region=us-east-1 --s3.endpoint http://10.6.0.2:9000 --s3.path-style-access true
131+ /opt/automq/kafka/bin/kafka-server-start.sh \
132+ /opt/automq/kafka/config/kraft/server.properties \
133+ --override cluster.id=$$CLUSTER_ID \
134+ --override node.id=2 \
135+ --override controller.quorum.voters=0@server1:9093,1@server2:9093,2@server3:9093 \
136+ --override controller.quorum.bootstrap.servers=server1:9093,server2:9093,server3:9093 \
137+ --override advertised.listeners=PLAINTEXT://server3:9092 \
138+ --override s3.data.buckets='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \
139+ --override s3.ops.buckets='1@s3://automq-ops?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \
140+ --override s3.wal.path='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true'
217141 networks :
218142 automq_net :
219- ipv4_address : 10.6.0.8
220143 depends_on :
221- - broker2
222-
223- volumes :
224- minio_data :
225- driver : local
144+ - minio
145+ - mc
226146
227147networks :
228148 automq_net :
@@ -232,4 +152,4 @@ networks:
232152 driver : default
233153 config :
234154 - subnet : " 10.6.0.0/16"
235- gateway : " 10.6.0.1"
155+ gateway : " 10.6.0.1"
0 commit comments