Schema-Registry greift über abgesicherte Adresse zu
[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:9092,kafka-2:9092,kafka-3:9092
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       SCHEMA_REGISTRY_KAFKASTORE_SECURITY_PROTOCOL: SASL_PLAINTEXT
170       SCHEMA_REGISTRY_KAFKASTORE_SASL_MECHANISM: PLAIN
171       SCHEMA_REGISTRY_KAFKASTORE_SASL_JAAS_CONFIG: >
172         org.apache.kafka.common.security.plain.PlainLoginModule
173         required
174         username="schemaregistry"
175         password="schemaregistry-secret";
176     ports:
177       - 8085:8085
178     depends_on:
179       - kafka-1
180       - kafka-2
181       - kafka-3
182
183   connect:
184     image: confluentinc/cp-kafka-connect:7.5.1
185     environment:
186       CONNECT_BOOTSTRAP_SERVERS: kafka-1:9091,kafka-2:9091,kafka-3:9091
187       CONNECT_REST_PORT: 8083
188       CONNECT_REST_LISTENERS: http://0.0.0.0:8083
189       CONNECT_REST_ADVERTISED_HOST_NAME: connect
190       CONNECT_CONFIG_STORAGE_TOPIC: __connect-config
191       CONNECT_OFFSET_STORAGE_TOPIC: __connect-offsets
192       CONNECT_STATUS_STORAGE_TOPIC: __connect-status
193       CONNECT_GROUP_ID: kafka-connect
194       CONNECT_KEY_CONVERTER_SCHEMAS_ENABLE: "true"
195       CONNECT_KEY_CONVERTER: io.confluent.connect.avro.AvroConverter
196       CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8085
197       CONNECT_VALUE_CONVERTER_SCHEMAS_ENABLE: "true"
198       CONNECT_VALUE_CONVERTER: io.confluent.connect.avro.AvroConverter
199       CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8085
200       CONNECT_INTERNAL_KEY_CONVERTER: org.apache.kafka.connect.json.JsonConverter
201       CONNECT_INTERNAL_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter
202       CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
203       CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
204       CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
205       CONNECT_PLUGIN_PATH: /usr/share/java/
206     ports:
207       - 8083:8083
208     depends_on:
209       - schema-registry
210
211   cli:
212     image: juplo/toolbox
213     command: sleep infinity
214     stop_grace_period: 0s
215     depends_on:
216       - kafka-1
217       - kafka-2
218       - kafka-3
219
220   setup:
221     image: juplo/toolbox
222     command:
223       - bash
224       - -c
225       - |
226         cub kafka-ready -b kafka-1:9091,kafka-2:9091,kafka-3:9091 3 60 > /dev/null 2>&1 || exit 1
227         if [ -e INITIALIZED ]
228         then
229           echo -n Bereits konfiguriert: 
230           cat INITIALIZED
231           kafka-topics --bootstrap-server kafka:9091 --describe --topic test
232           kafka-topics --bootstrap-server kafka:9091 --describe --topic __CruiseControlMetrics
233         else
234           kafka-topics --bootstrap-server kafka:9091 \
235                        --delete \
236                        --if-exists \
237                        --topic test
238           kafka-topics --bootstrap-server kafka:9091 \
239                        --create \
240                        --topic test \
241                        --partitions 2 \
242                        --replication-factor 3 \
243                        --config min.insync.replicas=2 \
244           && echo Das Topic \'test\' wurde erfolgreich angelegt: \
245           && kafka-topics --bootstrap-server kafka:9091 --describe --topic test
246           kafka-topics --bootstrap-server kafka:9091 \
247                        --delete \
248                        --if-exists \
249                        --topic __CruiseControlMetrics
250           kafka-topics --bootstrap-server kafka:9091 \
251                        --create \
252                        --topic __CruiseControlMetrics \
253                        --partitions 2 \
254                        --replication-factor 3 \
255                        --config min.insync.replicas=2 \
256           && echo Das Topic \'__CruiseControlMetrics\' wurde erfolgreich angelegt: \
257           && kafka-topics --bootstrap-server kafka:9091 --describe --topic __CruiseControlMetrics
258         fi \
259         && date > INITIALIZED
260     stop_grace_period: 0s
261     depends_on:
262       - cli
263
264   zoonavigator:
265     image: elkozmon/zoonavigator:1.1.2
266     ports:
267       - "8000:80"
268     environment:
269       HTTP_PORT: 80
270       CONNECTION_JUPLO_NAME: juplo
271       CONNECTION_JUPLO_CONN: zookeeper:2181
272       AUTO_CONNECT_CONNECTION_ID: JUPLO
273     depends_on:
274       - zookeeper
275
276   akhq:
277     image: tchiotludo/akhq:0.23.0
278     ports:
279       - 8888:8080
280     environment:
281       AKHQ_CONFIGURATION: |
282         akhq:
283           connections:
284             docker-kafka-server:
285               properties:
286                 bootstrap.servers: "kafka:9091"
287               schema-registry:
288                 url: "http://schema-registry:8085"
289               connect:
290                 - name: "connect"
291                   url: "http://connect:8083"
292     depends_on:
293       - kafka-1
294       - kafka-2
295       - kafka-3
296
297   producer:
298     image: juplo/endless-stream-spring-producer:1.0-SNAPSHOT
299     environment:
300       producer.throttle-ms: 1
301       spring.kafka.bootstrap-servers: kafka-1:9092, kafka-2:9092, kafka-3:9092
302       spring.kafka.client-id: producer
303       spring.kafka.template.default-topic: test
304       spring.kafka.producer.properties.linger.ms: 100
305
306   consumer-1:
307     image: juplo/spring-consumer:1.0-SNAPSHOT
308     environment:
309       spring.kafka.bootstrap-servers: kafka-1:9092, kafka-2:9092, kafka-3:9092
310       spring.kafka.client-id: consumer-1
311
312   consumer-2:
313     image: juplo/spring-consumer:1.0-SNAPSHOT
314     environment:
315       spring.kafka.bootstrap-servers: kafka-1:9092, kafka-2:9092, kafka-3:9092
316       spring.kafka.client-id: consumer-2
317
318   consumer-3:
319     image: juplo/spring-consumer:1.0-SNAPSHOT
320     environment:
321       spring.kafka.bootstrap-servers: kafka-1:9092, kafka-2:9092, kafka-3:9092
322       spring.kafka.client-id: consumer-3
323
324 volumes:
325   zookeeper-data:
326   zookeeper-log:
327   kafka-1-data:
328   kafka-2-data:
329   kafka-3-data:
330   kafka-4-data: