1d3172b6a9821ae52fe3e82c46eb20dc8e38928c
[demos/kafka/training] / docker / docker-compose.yml
1 version: '3.2'
2 services:
3   zookeeper:
4     image: confluentinc/cp-zookeeper:7.5.1
5     environment:
6       ZOOKEEPER_CLIENT_PORT: 2181
7     ports:
8       - 2181:2181
9     volumes:
10       - zookeeper-data:/var/lib/zookeeper/data
11       - zookeeper-log:/var/lib/zookeeper/log
12
13   kafka-1:
14     image: confluentinc/cp-kafka:7.5.1
15     environment:
16       KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
17       KAFKA_LISTENERS: BROKER://:9091, DOCKER://:9092, LOCALHOST://:9081
18       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, DOCKER:SASL_PLAINTEXT, LOCALHOST:SASL_PLAINTEXT
19       KAFKA_ADVERTISED_LISTENERS: BROKER://kafka-1:9091, DOCKER://kafka-1:9092, LOCALHOST://localhost:9081
20       KAFKA_BROKER_ID: 1
21       KAFKA_INTER_BROKER_LISTENER_NAME: BROKER
22       KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
23       KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
24       KAFKA_AUTHORIZER_CLASS_NAME: kafka.security.authorizer.AclAuthorizer
25       KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND: "true"
26       KAFKA_OPTS:
27         -javaagent:/usr/share/java/cp-base-new/jmx_prometheus_javaagent-0.18.0.jar=0.0.0.0:80:/etc/jmx-exporter.yml
28         -Dcom.sun.management.jmxremote=true
29         -Dcom.sun.management.jmxremote.port=9101
30         -Dcom.sun.management.jmxremote.authenticate=false
31       KAFKA_METRIC_REPORTERS: com.linkedin.kafka.cruisecontrol.metricsreporter.CruiseControlMetricsReporter
32       KAFKA_CRUISE_CONTROL_METRICS_REPORTER_BOOTSTRAP_SERVERS: localhost:9091
33       KAFKA_LISTENER_NAME_DOCKER_SASL_ENABLED_MECHANISMS: PLAIN
34       KAFKA_LISTENER_NAME_DOCKER_PLAIN_SASL_JAAS_CONFIG: |
35         org.apache.kafka.common.security.plain.PlainLoginModule required \
36         user_schemaregistry="schemaregistry-secret" \
37         user_connect="connect-secret" \
38         user_client="client-secret";
39       KAFKA_LISTENER_NAME_LOCALHOST_SASL_ENABLED_MECHANISMS: PLAIN
40       KAFKA_LISTENER_NAME_LOCALHOST_PLAIN_SASL_JAAS_CONFIG: |
41         org.apache.kafka.common.security.plain.PlainLoginModule required \
42         user_client="client-secret";
43       KAFKA_INTER_BROKER_LISTENER_NAME: BROKER
44       KAFKA_SASL_ENABLED_MECHANISMS: PLAIN, SCRAM-SHA-256, SCRAM-SHA-512
45     volumes:
46       - ./jmx-exporter.yml:/etc/jmx-exporter.yml:ro
47       - ./cruise-control-metrics-reporter.jar:/usr/share/java/kafka/cruise-control-metrics-reporter.jar:ro
48       - kafka-1-data:/var/lib/kafka/data
49     ports:
50       - 9081:9081
51     stop_grace_period: 120s
52     depends_on:
53       - zookeeper
54
55   kafka-2:
56     image: confluentinc/cp-kafka:7.5.1
57     environment:
58       KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
59       KAFKA_LISTENERS: BROKER://:9091, DOCKER://:9092, LOCALHOST://:9082
60       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, DOCKER:SASL_PLAINTEXT, LOCALHOST:SASL_PLAINTEXT
61       KAFKA_ADVERTISED_LISTENERS: BROKER://kafka-2:9091, DOCKER://kafka-2:9092, LOCALHOST://localhost:9082
62       KAFKA_BROKER_ID: 2
63       KAFKA_INTER_BROKER_LISTENER_NAME: BROKER
64       KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
65       KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
66       KAFKA_AUTHORIZER_CLASS_NAME: kafka.security.authorizer.AclAuthorizer
67       KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND: "true"
68       KAFKA_OPTS:
69         -javaagent:/usr/share/java/cp-base-new/jmx_prometheus_javaagent-0.18.0.jar=0.0.0.0:80:/etc/jmx-exporter.yml
70         -Dcom.sun.management.jmxremote=true
71         -Dcom.sun.management.jmxremote.port=9101
72         -Dcom.sun.management.jmxremote.authenticate=false
73       KAFKA_METRIC_REPORTERS: com.linkedin.kafka.cruisecontrol.metricsreporter.CruiseControlMetricsReporter
74       KAFKA_CRUISE_CONTROL_METRICS_REPORTER_BOOTSTRAP_SERVERS: localhost:9091
75       KAFKA_LISTENER_NAME_DOCKER_SASL_ENABLED_MECHANISMS: PLAIN
76       KAFKA_LISTENER_NAME_DOCKER_PLAIN_SASL_JAAS_CONFIG: |
77         org.apache.kafka.common.security.plain.PlainLoginModule required \
78         user_schemaregistry="schemaregistry-secret" \
79         user_connect="connect-secret" \
80         user_client="client-secret";
81       KAFKA_LISTENER_NAME_LOCALHOST_SASL_ENABLED_MECHANISMS: PLAIN
82       KAFKA_LISTENER_NAME_LOCALHOST_PLAIN_SASL_JAAS_CONFIG: |
83         org.apache.kafka.common.security.plain.PlainLoginModule required \
84         user_client="client-secret";
85       KAFKA_INTER_BROKER_LISTENER_NAME: BROKER
86       KAFKA_SASL_ENABLED_MECHANISMS: PLAIN, SCRAM-SHA-256, SCRAM-SHA-512
87     volumes:
88       - ./jmx-exporter.yml:/etc/jmx-exporter.yml:ro
89       - ./cruise-control-metrics-reporter.jar:/usr/share/java/kafka/cruise-control-metrics-reporter.jar:ro
90       - kafka-2-data:/var/lib/kafka/data
91     ports:
92       - 9092:9082
93       - 9082:9082
94     networks:
95       default:
96         aliases:
97           - kafka
98     stop_grace_period: 120s
99     depends_on:
100       - zookeeper
101
102   kafka-3:
103     image: confluentinc/cp-kafka:7.5.1
104     environment:
105       KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
106       KAFKA_LISTENERS: BROKER://:9091, DOCKER://:9092, LOCALHOST://:9083
107       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, DOCKER:SASL_PLAINTEXT, LOCALHOST:SASL_PLAINTEXT
108       KAFKA_ADVERTISED_LISTENERS: BROKER://kafka-3:9091, DOCKER://kafka-3:9092, LOCALHOST://localhost:9083
109       KAFKA_BROKER_ID: 3
110       KAFKA_INTER_BROKER_LISTENER_NAME: BROKER
111       KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
112       KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
113       KAFKA_AUTHORIZER_CLASS_NAME: kafka.security.authorizer.AclAuthorizer
114       KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND: "true"
115       KAFKA_OPTS:
116         -javaagent:/usr/share/java/cp-base-new/jmx_prometheus_javaagent-0.18.0.jar=0.0.0.0:80:/etc/jmx-exporter.yml
117         -Dcom.sun.management.jmxremote=true
118         -Dcom.sun.management.jmxremote.port=9101
119         -Dcom.sun.management.jmxremote.authenticate=false
120       KAFKA_METRIC_REPORTERS: com.linkedin.kafka.cruisecontrol.metricsreporter.CruiseControlMetricsReporter
121       KAFKA_CRUISE_CONTROL_METRICS_REPORTER_BOOTSTRAP_SERVERS: localhost:9091
122       KAFKA_LISTENER_NAME_DOCKER_SASL_ENABLED_MECHANISMS: PLAIN
123       KAFKA_LISTENER_NAME_DOCKER_PLAIN_SASL_JAAS_CONFIG: |
124         org.apache.kafka.common.security.plain.PlainLoginModule required \
125         user_schemaregistry="schemaregistry-secret" \
126         user_connect="connect-secret" \
127         user_client="client-secret";
128       KAFKA_LISTENER_NAME_LOCALHOST_SASL_ENABLED_MECHANISMS: PLAIN
129       KAFKA_LISTENER_NAME_LOCALHOST_PLAIN_SASL_JAAS_CONFIG: |
130         org.apache.kafka.common.security.plain.PlainLoginModule required \
131         user_client="client-secret";
132       KAFKA_INTER_BROKER_LISTENER_NAME: BROKER
133       KAFKA_SASL_ENABLED_MECHANISMS: PLAIN, SCRAM-SHA-256, SCRAM-SHA-512
134     volumes:
135       - ./jmx-exporter.yml:/etc/jmx-exporter.yml:ro
136       - ./cruise-control-metrics-reporter.jar:/usr/share/java/kafka/cruise-control-metrics-reporter.jar:ro
137       - kafka-3-data:/var/lib/kafka/data
138     ports:
139       - 9083:9083
140     stop_grace_period: 120s
141     depends_on:
142       - zookeeper
143
144   kafka-4:
145     image: confluentinc/cp-kafka:7.5.1
146     environment:
147       KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
148       KAFKA_LISTENERS: BROKER://:9091, DOCKER://:9092, LOCALHOST://:9084
149       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, DOCKER:SASL_PLAINTEXT, LOCALHOST:SASL_PLAINTEXT
150       KAFKA_ADVERTISED_LISTENERS: BROKER://kafka-4:9091, DOCKER://kafka-4:9092, LOCALHOST://localhost:9084
151       KAFKA_BROKER_ID: 4
152       KAFKA_INTER_BROKER_LISTENER_NAME: BROKER
153       KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
154       KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
155       KAFKA_AUTHORIZER_CLASS_NAME: kafka.security.authorizer.AclAuthorizer
156       KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND: "true"
157       KAFKA_OPTS:
158         -javaagent:/usr/share/java/cp-base-new/jmx_prometheus_javaagent-0.18.0.jar=0.0.0.0:80:/etc/jmx-exporter.yml
159         -Dcom.sun.management.jmxremote=true
160         -Dcom.sun.management.jmxremote.port=9101
161         -Dcom.sun.management.jmxremote.authenticate=false
162       KAFKA_METRIC_REPORTERS: com.linkedin.kafka.cruisecontrol.metricsreporter.CruiseControlMetricsReporter
163       KAFKA_CRUISE_CONTROL_METRICS_REPORTER_BOOTSTRAP_SERVERS: localhost:9091
164       KAFKA_LISTENER_NAME_DOCKER_SASL_ENABLED_MECHANISMS: PLAIN
165       KAFKA_LISTENER_NAME_DOCKER_PLAIN_SASL_JAAS_CONFIG: |
166         org.apache.kafka.common.security.plain.PlainLoginModule required \
167         user_schemaregistry="schemaregistry-secret" \
168         user_connect="connect-secret" \
169         user_client="client-secret";
170       KAFKA_LISTENER_NAME_LOCALHOST_SASL_ENABLED_MECHANISMS: PLAIN
171       KAFKA_LISTENER_NAME_LOCALHOST_PLAIN_SASL_JAAS_CONFIG: |
172         org.apache.kafka.common.security.plain.PlainLoginModule required \
173         user_client="client-secret";
174       KAFKA_INTER_BROKER_LISTENER_NAME: BROKER
175       KAFKA_SASL_ENABLED_MECHANISMS: PLAIN, SCRAM-SHA-256, SCRAM-SHA-512
176     volumes:
177       - ./jmx-exporter.yml:/etc/jmx-exporter.yml:ro
178       - ./cruise-control-metrics-reporter.jar:/usr/share/java/kafka/cruise-control-metrics-reporter.jar:ro
179       - kafka-4-data:/var/lib/kafka/data
180     ports:
181       - 9084:9084
182     stop_grace_period: 120s
183     depends_on:
184       - zookeeper
185
186   cruise-control:
187     image: juplo/cruise-control
188     environment:
189       BOOTSTRAP_SERVERS: kafka-1:9091,kafka-2:9091,kafka-3:9091
190       ZOOKEEPER_CONNECT: zookeeper:2181/
191     ports:
192       - "9090:9090"
193
194   schema-registry:
195     image: confluentinc/cp-schema-registry:7.5.1
196     environment:
197       SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: kafka-1:9092,kafka-2:9092,kafka-3:9092
198       SCHEMA_REGISTRY_HOST_NAME: schema-registry
199       SCHEMA_REGISTRY_LISTENERS: http://0.0.0.0:8085
200       SCHEMA_REGISTRY_LOG4J_ROOT_LOGLEVEL: INFO
201       SCHEMA_REGISTRY_KAFKASTORE_SECURITY_PROTOCOL: SASL_PLAINTEXT
202       SCHEMA_REGISTRY_KAFKASTORE_SASL_MECHANISM: PLAIN
203       SCHEMA_REGISTRY_KAFKASTORE_SASL_JAAS_CONFIG: >
204         org.apache.kafka.common.security.plain.PlainLoginModule
205         required
206         username="schemaregistry"
207         password="schemaregistry-secret";
208     ports:
209       - 8085:8085
210     depends_on:
211       - kafka-1
212       - kafka-2
213       - kafka-3
214
215   connect:
216     image: confluentinc/cp-kafka-connect:7.5.1
217     environment:
218       CONNECT_BOOTSTRAP_SERVERS: kafka-1:9091,kafka-2:9091,kafka-3:9091
219       CONNECT_REST_PORT: 8083
220       CONNECT_REST_LISTENERS: http://0.0.0.0:8083
221       CONNECT_REST_ADVERTISED_HOST_NAME: connect
222       CONNECT_CONFIG_STORAGE_TOPIC: __connect-config
223       CONNECT_OFFSET_STORAGE_TOPIC: __connect-offsets
224       CONNECT_STATUS_STORAGE_TOPIC: __connect-status
225       CONNECT_GROUP_ID: kafka-connect
226       CONNECT_KEY_CONVERTER_SCHEMAS_ENABLE: "true"
227       CONNECT_KEY_CONVERTER: io.confluent.connect.avro.AvroConverter
228       CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8085
229       CONNECT_VALUE_CONVERTER_SCHEMAS_ENABLE: "true"
230       CONNECT_VALUE_CONVERTER: io.confluent.connect.avro.AvroConverter
231       CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8085
232       CONNECT_INTERNAL_KEY_CONVERTER: org.apache.kafka.connect.json.JsonConverter
233       CONNECT_INTERNAL_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter
234       CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
235       CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
236       CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
237       CONNECT_PLUGIN_PATH: /usr/share/java/
238     ports:
239       - 8083:8083
240     depends_on:
241       - schema-registry
242
243   cli:
244     image: juplo/toolbox
245     command: sleep infinity
246     stop_grace_period: 0s
247     depends_on:
248       - kafka-1
249       - kafka-2
250       - kafka-3
251
252   setup:
253     image: juplo/toolbox
254     command:
255       - bash
256       - -c
257       - |
258         cub kafka-ready -b kafka-1:9091,kafka-2:9091,kafka-3:9091 3 60 > /dev/null 2>&1 || exit 1
259         if [ -e INITIALIZED ]
260         then
261           echo -n Bereits konfiguriert: 
262           cat INITIALIZED
263           kafka-topics --bootstrap-server kafka:9091 --describe --topic test
264           kafka-topics --bootstrap-server kafka:9091 --describe --topic __CruiseControlMetrics
265         else
266           kafka-topics --bootstrap-server kafka:9091 \
267                        --delete \
268                        --if-exists \
269                        --topic test
270           kafka-topics --bootstrap-server kafka:9091 \
271                        --create \
272                        --topic test \
273                        --partitions 2 \
274                        --replication-factor 3 \
275                        --config min.insync.replicas=2 \
276           && echo Das Topic \'test\' wurde erfolgreich angelegt: \
277           && kafka-topics --bootstrap-server kafka:9091 --describe --topic test
278           kafka-topics --bootstrap-server kafka:9091 \
279                        --delete \
280                        --if-exists \
281                        --topic __CruiseControlMetrics
282           kafka-topics --bootstrap-server kafka:9091 \
283                        --create \
284                        --topic __CruiseControlMetrics \
285                        --partitions 2 \
286                        --replication-factor 3 \
287                        --config min.insync.replicas=2 \
288           && echo Das Topic \'__CruiseControlMetrics\' wurde erfolgreich angelegt: \
289           && kafka-topics --bootstrap-server kafka:9091 --describe --topic __CruiseControlMetrics
290         fi \
291         && date > INITIALIZED
292     stop_grace_period: 0s
293     depends_on:
294       - cli
295
296   zoonavigator:
297     image: elkozmon/zoonavigator:1.1.2
298     ports:
299       - "8000:80"
300     environment:
301       HTTP_PORT: 80
302       CONNECTION_JUPLO_NAME: juplo
303       CONNECTION_JUPLO_CONN: zookeeper:2181
304       AUTO_CONNECT_CONNECTION_ID: JUPLO
305     depends_on:
306       - zookeeper
307
308   akhq:
309     image: tchiotludo/akhq:0.23.0
310     ports:
311       - 8888:8080
312     environment:
313       AKHQ_CONFIGURATION: |
314         akhq:
315           connections:
316             docker-kafka-server:
317               properties:
318                 bootstrap.servers: "kafka:9091"
319               schema-registry:
320                 url: "http://schema-registry:8085"
321               connect:
322                 - name: "connect"
323                   url: "http://connect:8083"
324     depends_on:
325       - kafka-1
326       - kafka-2
327       - kafka-3
328
329   producer:
330     image: juplo/simple-producer:1.0-SNAPSHOT
331     command: kafka:9092 test producer
332
333   consumer-1:
334     image: juplo/spring-consumer:1.0-SNAPSHOT
335     environment:
336       spring.kafka.bootstrap-servers: kafka-1:9092, kafka-2:9092, kafka-3:9092
337       spring.kafka.client-id: consumer-1
338
339   consumer-2:
340     image: juplo/spring-consumer:1.0-SNAPSHOT
341     environment:
342       spring.kafka.bootstrap-servers: kafka-1:9092, kafka-2:9092, kafka-3:9092
343       spring.kafka.client-id: consumer-1
344
345   consumer-3:
346     image: juplo/spring-consumer:1.0-SNAPSHOT
347     environment:
348       spring.kafka.bootstrap-servers: kafka-1:9092, kafka-2:9092, kafka-3:9092
349       spring.kafka.client-id: consumer-1
350
351 volumes:
352   zookeeper-data:
353   zookeeper-log:
354   kafka-1-data:
355   kafka-2-data:
356   kafka-3-data:
357   kafka-4-data: