ffd4c1f3fe2f9c98523ad388b6975a53bfaaa3c9
[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://:9092, LOCALHOST://:9081
18       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, LOCALHOST:PLAINTEXT
19       KAFKA_ADVERTISED_LISTENERS: BROKER://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_METRIC_REPORTERS: com.linkedin.kafka.cruisecontrol.metricsreporter.CruiseControlMetricsReporter
25     volumes:
26       - ./cruise-control-metrics-reporter.jar:/usr/share/java/kafka/cruise-control-metrics-reporter.jar:ro
27       - kafka-1-data:/var/lib/kafka/data
28     ports:
29       - 9081:9081
30     stop_grace_period: 120s
31     depends_on:
32       - zookeeper
33
34   kafka-2:
35     image: confluentinc/cp-kafka:7.5.1
36     environment:
37       KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
38       KAFKA_LISTENERS: BROKER://:9092, LOCALHOST://:9082
39       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, LOCALHOST:PLAINTEXT
40       KAFKA_ADVERTISED_LISTENERS: BROKER://kafka-2:9092, LOCALHOST://localhost:9082
41       KAFKA_BROKER_ID: 2
42       KAFKA_INTER_BROKER_LISTENER_NAME: BROKER
43       KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
44       KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
45       KAFKA_METRIC_REPORTERS: com.linkedin.kafka.cruisecontrol.metricsreporter.CruiseControlMetricsReporter
46     volumes:
47       - ./cruise-control-metrics-reporter.jar:/usr/share/java/kafka/cruise-control-metrics-reporter.jar:ro
48       - kafka-2-data:/var/lib/kafka/data
49     ports:
50       - 9092:9082
51       - 9082:9082
52     networks:
53       default:
54         aliases:
55           - kafka
56     stop_grace_period: 120s
57     depends_on:
58       - zookeeper
59
60   kafka-3:
61     image: confluentinc/cp-kafka:7.5.1
62     environment:
63       KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
64       KAFKA_LISTENERS: BROKER://:9092, LOCALHOST://:9083
65       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, LOCALHOST:PLAINTEXT
66       KAFKA_ADVERTISED_LISTENERS: BROKER://kafka-3:9092, LOCALHOST://localhost:9083
67       KAFKA_BROKER_ID: 3
68       KAFKA_INTER_BROKER_LISTENER_NAME: BROKER
69       KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
70       KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
71       KAFKA_METRIC_REPORTERS: com.linkedin.kafka.cruisecontrol.metricsreporter.CruiseControlMetricsReporter
72     volumes:
73       - ./cruise-control-metrics-reporter.jar:/usr/share/java/kafka/cruise-control-metrics-reporter.jar:ro
74       - kafka-3-data:/var/lib/kafka/data
75     ports:
76       - 9083:9083
77     stop_grace_period: 120s
78     depends_on:
79       - zookeeper
80
81   cruise-control:
82     image: juplo/cruise-control
83     environment:
84       BOOTSTRAP_SERVERS: kafka-1:9092,kafka-2:9092,kafka-3:9092
85       ZOOKEEPER_CONNECT: zookeeper:2181/
86       CORS_ORIGIN: http://localhost:9080
87     ports:
88       - "9090:9090"
89
90   schema-registry:
91     image: confluentinc/cp-schema-registry:7.5.1
92     environment:
93       SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: kafka-1:9092,kafka-2:9092,kafka-3:9092
94       SCHEMA_REGISTRY_HOST_NAME: schema-registry
95       SCHEMA_REGISTRY_LISTENERS: http://0.0.0.0:8085
96       SCHEMA_REGISTRY_LOG4J_ROOT_LOGLEVEL: INFO
97     ports:
98       - 8085:8085
99     depends_on:
100       - kafka-1
101       - kafka-2
102       - kafka-3
103
104   connect:
105     image: confluentinc/cp-kafka-connect:7.5.1
106     environment:
107       CONNECT_BOOTSTRAP_SERVERS: kafka-1:9092,kafka-2:9092,kafka-3:9092
108       CONNECT_REST_PORT: 8083
109       CONNECT_REST_LISTENERS: http://0.0.0.0:8083
110       CONNECT_REST_ADVERTISED_HOST_NAME: connect
111       CONNECT_CONFIG_STORAGE_TOPIC: __connect-config
112       CONNECT_OFFSET_STORAGE_TOPIC: __connect-offsets
113       CONNECT_STATUS_STORAGE_TOPIC: __connect-status
114       CONNECT_GROUP_ID: kafka-connect
115       CONNECT_KEY_CONVERTER_SCHEMAS_ENABLE: "true"
116       CONNECT_KEY_CONVERTER: io.confluent.connect.avro.AvroConverter
117       CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8085
118       CONNECT_VALUE_CONVERTER_SCHEMAS_ENABLE: "true"
119       CONNECT_VALUE_CONVERTER: io.confluent.connect.avro.AvroConverter
120       CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8085
121       CONNECT_INTERNAL_KEY_CONVERTER: org.apache.kafka.connect.json.JsonConverter
122       CONNECT_INTERNAL_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter
123       CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
124       CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
125       CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
126       CONNECT_PLUGIN_PATH: /usr/share/java/
127     ports:
128       - 8083:8083
129     depends_on:
130       - schema-registry
131
132   cli:
133     image: juplo/toolbox
134     command: sleep infinity
135     stop_grace_period: 0s
136     depends_on:
137       - kafka-1
138       - kafka-2
139       - kafka-3
140
141   setup:
142     image: juplo/toolbox
143     command:
144       - bash
145       - -c
146       - |
147         cub kafka-ready -b kafka-1:9092,kafka-2:9092,kafka-3:9092 3 60 > /dev/null 2>&1 || exit 1
148         if [ -e INITIALIZED ]
149         then
150           echo -n Bereits konfiguriert: 
151           cat INITIALIZED
152           kafka-topics --bootstrap-server kafka:9092 --describe --topic test
153           kafka-topics --bootstrap-server kafka:9092 --describe --topic __CruiseControlMetrics
154         else
155           kafka-topics --bootstrap-server kafka:9092 \
156                        --delete \
157                        --if-exists \
158                        --topic test
159           kafka-topics --bootstrap-server kafka:9092 \
160                        --create \
161                        --topic test \
162                        --partitions 2 \
163                        --replication-factor 3 \
164                        --config min.insync.replicas=2 \
165           && echo Das Topic \'test\' wurde erfolgreich angelegt: \
166           && kafka-topics --bootstrap-server kafka:9092 --describe --topic test
167           kafka-topics --bootstrap-server kafka:9092 \
168                        --delete \
169                        --if-exists \
170                        --topic __CruiseControlMetrics
171           kafka-topics --bootstrap-server kafka:9092 \
172                        --create \
173                        --topic __CruiseControlMetrics \
174                        --partitions 2 \
175                        --replication-factor 3 \
176                        --config min.insync.replicas=2 \
177           && echo Das Topic \'__CruiseControlMetrics\' wurde erfolgreich angelegt: \
178           && kafka-topics --bootstrap-server kafka:9092 --describe --topic __CruiseControlMetrics
179         fi \
180         && date > INITIALIZED
181     stop_grace_period: 0s
182     depends_on:
183       - cli
184
185   zoonavigator:
186     image: elkozmon/zoonavigator:1.1.2
187     ports:
188       - "8000:80"
189     environment:
190       HTTP_PORT: 80
191       CONNECTION_JUPLO_NAME: juplo
192       CONNECTION_JUPLO_CONN: zookeeper:2181
193       AUTO_CONNECT_CONNECTION_ID: JUPLO
194     depends_on:
195       - zookeeper
196
197   akhq:
198     image: tchiotludo/akhq:0.23.0
199     ports:
200       - 8888:8080
201     environment:
202       AKHQ_CONFIGURATION: |
203         akhq:
204           connections:
205             docker-kafka-server:
206               properties:
207                 bootstrap.servers: "kafka:9092"
208               schema-registry:
209                 url: "http://schema-registry:8085"
210               connect:
211                 - name: "connect"
212                   url: "http://connect:8083"
213     depends_on:
214       - kafka-1
215       - kafka-2
216       - kafka-3
217
218   cruise-control-ui:
219     image: juplo/cruise-control-ui
220     volumes:
221       - ./config.csv:/usr/share/nginx/html/static/config.csv
222     ports:
223       - "9080:80"
224
225   producer:
226     image: juplo/endless-stream-spring-producer:1.0-SNAPSHOT
227     environment:
228       producer.throttle-ms: 1
229       spring.kafka.bootstrap-servers: kafka-1:9092, kafka-2:9092, kafka-3:9092
230       spring.kafka.client-id: producer
231       spring.kafka.template.default-topic: test
232       spring.kafka.producer.properties.linger.ms: 100
233
234   consumer-1:
235     image: juplo/spring-consumer:1.0-SNAPSHOT
236     environment:
237       spring.kafka.bootstrap-servers: kafka-1:9092, kafka-2:9092, kafka-3:9092
238       spring.kafka.client-id: consumer-1
239
240   consumer-2:
241     image: juplo/spring-consumer:1.0-SNAPSHOT
242     environment:
243       spring.kafka.bootstrap-servers: kafka-1:9092, kafka-2:9092, kafka-3:9092
244       spring.kafka.client-id: consumer-2
245
246   consumer-3:
247     image: juplo/spring-consumer:1.0-SNAPSHOT
248     environment:
249       spring.kafka.bootstrap-servers: kafka-1:9092, kafka-2:9092, kafka-3:9092
250       spring.kafka.client-id: consumer-3
251
252 volumes:
253   zookeeper-data:
254   zookeeper-log:
255   kafka-1-data:
256   kafka-2-data:
257   kafka-3-data: