13
13
# See the License for the specific language governing permissions and
14
14
# limitations under the License.
15
15
16
- # Three -node AutoMQ cluster setup with MinIO for production-like environments
16
+ # Single -node AutoMQ setup with MinIO for quick starts
17
17
version : " 3.8"
18
18
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
+
19
26
services :
20
27
# MinIO service for S3 storage
21
28
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
25
35
ports :
26
36
- " 9000:9000" # MinIO API
27
37
- " 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" ]
34
39
networks :
35
40
automq_net :
36
- ipv4_address : 10.6.0.2
37
41
healthcheck :
38
- test : ["CMD", "curl", "-f", "http://localhost :9000/minio/health/live"]
42
+ test : [ "CMD", "curl", "-f", "http://minio :9000/minio/health/live" ]
39
43
interval : 5s
40
44
timeout : 5s
41
45
retries : 3
42
46
43
47
# Create needed buckets
44
48
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
48
51
depends_on :
49
52
minio :
50
53
condition : service_healthy
51
54
entrypoint : >
52
55
/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
57
64
"
58
65
networks :
59
66
- automq_net
60
67
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"
66
71
image : automqinc/automq:latest
67
- ports :
68
- - " 9093:9093" # Controller API
72
+ stop_grace_period : 1m
69
73
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
75
75
command :
76
76
- bash
77
77
- -c
78
78
- |
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'
80
89
networks :
81
90
automq_net :
82
- ipv4_address : 10.6.0.3
83
91
depends_on :
84
92
- minio
85
93
- mc
86
94
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"
172
97
image : automqinc/automq:latest
173
- ports :
174
- - " 9096:9092" # Kafka API (mapped to different port on host)
98
+ stop_grace_period : 1m
175
99
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
184
101
command :
185
102
- bash
186
103
- -c
187
104
- |
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'
189
115
networks :
190
116
automq_net :
191
- ipv4_address : 10.6.0.7
192
117
depends_on :
193
- - broker1
118
+ - minio
119
+ - mc
194
120
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"
200
123
image : automqinc/automq:latest
201
- ports :
202
- - " 9097:9092" # Kafka API (mapped to different port on host)
124
+ stop_grace_period : 1m
203
125
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
212
127
command :
213
128
- bash
214
129
- -c
215
130
- |
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'
217
141
networks :
218
142
automq_net :
219
- ipv4_address : 10.6.0.8
220
143
depends_on :
221
- - broker2
222
-
223
- volumes :
224
- minio_data :
225
- driver : local
144
+ - minio
145
+ - mc
226
146
227
147
networks :
228
148
automq_net :
@@ -232,4 +152,4 @@ networks:
232
152
driver : default
233
153
config :
234
154
- subnet : " 10.6.0.0/16"
235
- gateway : " 10.6.0.1"
155
+ gateway : " 10.6.0.1"
0 commit comments