DOCKER und LOCALHOST erfordern Authentifizierung
[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:9091,kafka-2:9091,kafka-3:9091
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     ports:
202       - 8085:8085
203     depends_on:
204       - kafka-1
205       - kafka-2
206       - kafka-3
207
208   connect:
209     image: confluentinc/cp-kafka-connect:7.5.1
210     environment:
211       CONNECT_BOOTSTRAP_SERVERS: kafka-1:9091,kafka-2:9091,kafka-3:9091
212       CONNECT_REST_PORT: 8083
213       CONNECT_REST_LISTENERS: http://0.0.0.0:8083
214       CONNECT_REST_ADVERTISED_HOST_NAME: connect
215       CONNECT_CONFIG_STORAGE_TOPIC: __connect-config
216       CONNECT_OFFSET_STORAGE_TOPIC: __connect-offsets
217       CONNECT_STATUS_STORAGE_TOPIC: __connect-status
218       CONNECT_GROUP_ID: kafka-connect
219       CONNECT_KEY_CONVERTER_SCHEMAS_ENABLE: "true"
220       CONNECT_KEY_CONVERTER: io.confluent.connect.avro.AvroConverter
221       CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8085
222       CONNECT_VALUE_CONVERTER_SCHEMAS_ENABLE: "true"
223       CONNECT_VALUE_CONVERTER: io.confluent.connect.avro.AvroConverter
224       CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8085
225       CONNECT_INTERNAL_KEY_CONVERTER: org.apache.kafka.connect.json.JsonConverter
226       CONNECT_INTERNAL_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter
227       CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
228       CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
229       CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
230       CONNECT_PLUGIN_PATH: /usr/share/java/
231     ports:
232       - 8083:8083
233     depends_on:
234       - schema-registry
235
236   cli:
237     image: juplo/toolbox
238     command: sleep infinity
239     stop_grace_period: 0s
240     depends_on:
241       - kafka-1
242       - kafka-2
243       - kafka-3
244
245   setup:
246     image: juplo/toolbox
247     command:
248       - bash
249       - -c
250       - |
251         cub kafka-ready -b kafka-1:9091,kafka-2:9091,kafka-3:9091 3 60 > /dev/null 2>&1 || exit 1
252         if [ -e INITIALIZED ]
253         then
254           echo -n Bereits konfiguriert: 
255           cat INITIALIZED
256           kafka-topics --bootstrap-server kafka:9091 --describe --topic test
257           kafka-topics --bootstrap-server kafka:9091 --describe --topic __CruiseControlMetrics
258         else
259           kafka-topics --bootstrap-server kafka:9091 \
260                        --delete \
261                        --if-exists \
262                        --topic test
263           kafka-topics --bootstrap-server kafka:9091 \
264                        --create \
265                        --topic test \
266                        --partitions 2 \
267                        --replication-factor 3 \
268                        --config min.insync.replicas=2 \
269           && echo Das Topic \'test\' wurde erfolgreich angelegt: \
270           && kafka-topics --bootstrap-server kafka:9091 --describe --topic test
271           kafka-topics --bootstrap-server kafka:9091 \
272                        --delete \
273                        --if-exists \
274                        --topic __CruiseControlMetrics
275           kafka-topics --bootstrap-server kafka:9091 \
276                        --create \
277                        --topic __CruiseControlMetrics \
278                        --partitions 2 \
279                        --replication-factor 3 \
280                        --config min.insync.replicas=2 \
281           && echo Das Topic \'__CruiseControlMetrics\' wurde erfolgreich angelegt: \
282           && kafka-topics --bootstrap-server kafka:9091 --describe --topic __CruiseControlMetrics
283         fi \
284         && date > INITIALIZED
285     stop_grace_period: 0s
286     depends_on:
287       - cli
288
289   zoonavigator:
290     image: elkozmon/zoonavigator:1.1.2
291     ports:
292       - "8000:80"
293     environment:
294       HTTP_PORT: 80
295       CONNECTION_JUPLO_NAME: juplo
296       CONNECTION_JUPLO_CONN: zookeeper:2181
297       AUTO_CONNECT_CONNECTION_ID: JUPLO
298     depends_on:
299       - zookeeper
300
301   akhq:
302     image: tchiotludo/akhq:0.23.0
303     ports:
304       - 8888:8080
305     environment:
306       AKHQ_CONFIGURATION: |
307         akhq:
308           connections:
309             docker-kafka-server:
310               properties:
311                 bootstrap.servers: "kafka:9091"
312               schema-registry:
313                 url: "http://schema-registry:8085"
314               connect:
315                 - name: "connect"
316                   url: "http://connect:8083"
317     depends_on:
318       - kafka-1
319       - kafka-2
320       - kafka-3
321
322   producer:
323     image: juplo/simple-producer:1.0-SNAPSHOT
324     command: kafka:9092 test producer
325
326   consumer-1:
327     image: juplo/spring-consumer:1.0-SNAPSHOT
328     environment:
329       spring.kafka.bootstrap-servers: kafka-1:9092, kafka-2:9092, kafka-3:9092
330       spring.kafka.client-id: consumer-1
331
332   consumer-2:
333     image: juplo/spring-consumer:1.0-SNAPSHOT
334     environment:
335       spring.kafka.bootstrap-servers: kafka-1:9092, kafka-2:9092, kafka-3:9092
336       spring.kafka.client-id: consumer-1
337
338   consumer-3:
339     image: juplo/spring-consumer:1.0-SNAPSHOT
340     environment:
341       spring.kafka.bootstrap-servers: kafka-1:9092, kafka-2:9092, kafka-3:9092
342       spring.kafka.client-id: consumer-1
343
344 volumes:
345   zookeeper-data:
346   zookeeper-log:
347   kafka-1-data:
348   kafka-2-data:
349   kafka-3-data:
350   kafka-4-data: