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