c8ec5a241f4e016c3bfe9b6600f7b58e84e2803b
[demos/kafka/wordcount] / docker-compose.yml
1 services:
2
3   kafka:
4     image: confluentinc/cp-kafka:7.5.1
5     environment:
6       KAFKA_NODE_ID: 1
7       KAFKA_LISTENERS: CONTROLLER://:9072, DOCKER://:9092, LOCALHOST://:9082
8       KAFKA_ADVERTISED_LISTENERS: DOCKER://kafka:9092, LOCALHOST://localhost:9082
9       KAFKA_INTER_BROKER_LISTENER_NAME: DOCKER
10       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT, DOCKER:PLAINTEXT, LOCALHOST:PLAINTEXT
11       KAFKA_PROCESS_ROLES: broker, controller
12       KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9072
13       KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
14       CLUSTER_ID: MkU3OEVBNTcwNTJENDM2Qk
15       KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
16       KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
17       KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
18       KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
19       KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
20     ports:
21       - 9092:9082
22       - 9082:9082
23     stop_grace_period: 120s
24
25   traefik:
26     image: "traefik:v2.5"
27     command:
28       #- "--log.level=DEBUG"
29       - "--api.insecure=true"
30       - "--providers.docker=true"
31       - "--providers.docker.exposedbydefault=false"
32       - "--entrypoints.web.address=:80"
33     ports:
34       - "80:80"
35       - "8080:8080"
36     volumes:
37       - "/var/run/docker.sock:/var/run/docker.sock:ro"
38
39
40   recorder:
41     image: juplo/wordcount--recorder:1.2.2
42     labels:
43       - "traefik.enable=true"
44       - "traefik.http.routers.recorder.rule=Host(`recorder.localhost`)"
45       - "traefik.http.routers.recorder.entrypoints=web"
46     environment:
47       juplo.wordcount.recorder.bootstrap-server: kafka:9092
48     depends_on:
49       - kafka
50
51   users:
52     image: juplo/wordcount--users:1.0.7
53     labels:
54       - "traefik.enable=true"
55       - "traefik.http.routers.users.rule=Host(`users.localhost`)"
56       - "traefik.http.routers.users.entrypoints=web"
57     environment:
58       juplo.wordcount.users.bootstrap-server: kafka:9092
59     depends_on:
60       - kafka
61
62   splitter:
63     image: juplo/wordcount--splitter:1.2.2
64     labels:
65       - "traefik.enable=true"
66       - "traefik.http.routers.splitter.rule=Host(`splitter.localhost`)"
67       - "traefik.http.routers.splitter.entrypoints=web"
68     environment:
69       juplo.wordcount.splitter.bootstrap-server: kafka:9092
70     depends_on:
71       - kafka
72
73   counter:
74     image: juplo/wordcount--counter:1.4.2
75     labels:
76       - "traefik.enable=true"
77       - "traefik.http.routers.counter.rule=Host(`counter.localhost`)"
78       - "traefik.http.routers.counter.entrypoints=web"
79     environment:
80       juplo.wordcount.counter.bootstrap-server: kafka:9092
81     depends_on:
82       - kafka
83
84   top10:
85     image: juplo/wordcount--top10:1.4.2
86     labels:
87       - "traefik.enable=true"
88       - "traefik.http.routers.top10.rule=Host(`top10.localhost`)"
89       - "traefik.http.routers.top10.entrypoints=web"
90     environment:
91       juplo.wordcount.top10.bootstrap-server: kafka:9092
92     depends_on:
93       - kafka
94
95   query:
96     image: juplo/wordcount--query:2.1.2
97     labels:
98       - "traefik.enable=true"
99       - "traefik.http.routers.query.rule=Host(`query.localhost`)"
100       - "traefik.http.routers.query.entrypoints=web"
101     environment:
102       juplo.wordcount.query.bootstrap-server: kafka:9092
103     depends_on:
104       - kafka
105
106   popular:
107     image: juplo/wordcount--popular:1.3.2
108     labels:
109       - "traefik.enable=true"
110       - "traefik.http.routers.popular.rule=Host(`popular.localhost`)"
111       - "traefik.http.routers.popular.entrypoints=web"
112     environment:
113       juplo.wordcount.popular.bootstrap-server: kafka:9092
114     depends_on:
115       - kafka
116
117
118   bart:
119     image: juplo/wordcount--fortune:1.0.1
120     command: bash -c "
121       while [ true ];
122       do
123         /usr/games/fortune chalkboard
124           | head -1
125           | http -v recorder:8081/bart;
126         echo;
127         sleep 1;
128       done"
129
130   nerd:
131     image: juplo/wordcount--fortune:1.0.1
132     command: bash -c "
133       while [ true ];
134       do
135         /usr/games/fortune computers
136           | grep  -v '^[[:space:]]*--'
137           | http -v recorder:8081/nerd;
138         echo;
139         sleep 1;
140       done"
141
142   riddler:
143     image: juplo/wordcount--fortune:1.0.1
144     command: bash -c "
145       while [ true ];
146       do
147         /usr/games/fortune riddles
148           | awk -F':' '/^Q/ { print $$2 }'
149           | http -v recorder:8081/riddler;
150         echo;
151         sleep 1;
152       done"
153
154
155   cli:
156     image: juplo/toolbox
157     command: sleep infinity
158     stop_grace_period: 0s
159     depends_on:
160       - kafka
161       - traefik
162
163   setup:
164     image: juplo/toolbox
165     command:
166       - bash
167       - -c
168       - |
169         cub kafka-ready -b kafka:9092 1 60 > /dev/null 2>&1 || exit 1
170         if [ -e INITIALIZED ]
171         then
172           echo -n Bereits konfiguriert:
173           cat INITIALIZED
174           kafka-topics --bootstrap-server kafka:9092 --describe --topic users
175           kafka-topics --bootstrap-server kafka:9092 --describe --topic recordings
176           kafka-topics --bootstrap-server kafka:9092 --describe --topic words
177           kafka-topics --bootstrap-server kafka:9092 --describe --topic countings
178           kafka-topics --bootstrap-server kafka:9092 --describe --topic top10
179           kafka-topics --bootstrap-server kafka:9092 --describe --topic popular
180         else
181           kafka-topics --bootstrap-server kafka:9092 \
182                        --delete \
183                        --if-exists \
184                        --topic users
185           kafka-topics --bootstrap-server kafka:9092 \
186                        --delete \
187                        --if-exists \
188                        --topic recordings
189           kafka-topics --bootstrap-server kafka:9092 \
190                        --delete \
191                        --if-exists \
192                        --topic words
193           kafka-topics --bootstrap-server kafka:9092 \
194                        --delete \
195                        --if-exists \
196                        --topic countings
197           kafka-topics --bootstrap-server kafka:9092 \
198                        --delete \
199                        --if-exists \
200                        --topic top10
201           kafka-topics --bootstrap-server kafka:9092 \
202                        --delete \
203                        --if-exists \
204                        --topic popular
205           kafka-topics --bootstrap-server kafka:9092 \
206                        --create \
207                        --topic users \
208                        --partitions 3 \
209                        --replication-factor 1 \
210                        --config min.insync.replicas=1 \
211           && echo Das Topic \'users\' wurde erfolgreich angelegt: \
212           && kafka-topics --bootstrap-server kafka:9092 --describe --topic users \
213           && kafka-topics --bootstrap-server kafka:9092 \
214                        --create \
215                        --topic recordings \
216                        --partitions 3 \
217                        --replication-factor 1 \
218                        --config min.insync.replicas=1 \
219           && echo Das Topic \'recordings\' wurde erfolgreich angelegt: \
220           && kafka-topics --bootstrap-server kafka:9092 --describe --topic recordings \
221           && kafka-topics --bootstrap-server kafka:9092 \
222                        --create \
223                        --topic words \
224                        --partitions 3 \
225                        --replication-factor 1 \
226                        --config min.insync.replicas=1 \
227           && echo Das Topic \'words\' wurde erfolgreich angelegt: \
228           && kafka-topics --bootstrap-server kafka:9092 --describe --topic words \
229           && kafka-topics --bootstrap-server kafka:9092 \
230                        --create \
231                        --topic countings \
232                        --partitions 3 \
233                        --replication-factor 1 \
234                        --config min.insync.replicas=1 \
235           && echo Das Topic \'countings\' wurde erfolgreich angelegt: \
236           && kafka-topics --bootstrap-server kafka:9092 --describe --topic countings \
237           && kafka-topics --bootstrap-server kafka:9092 \
238                        --create \
239                        --topic top10 \
240                        --partitions 3 \
241                        --replication-factor 1 \
242                        --config min.insync.replicas=1 \
243           && echo Das Topic \'top10\' wurde erfolgreich angelegt: \
244           && kafka-topics --bootstrap-server kafka:9092 --describe --topic top10 \
245           && kafka-topics --bootstrap-server kafka:9092 \
246                        --create \
247                        --topic popular \
248                        --partitions 3 \
249                        --replication-factor 1 \
250                        --config min.insync.replicas=1 \
251           && echo Das Topic \'popular\' wurde erfolgreich angelegt: \
252           && kafka-topics --bootstrap-server kafka:9092 --describe --topic popular \
253           && date > INITIALIZED
254         fi
255     stop_grace_period: 0s
256     depends_on:
257       - cli
258
259   akhq:
260     image: tchiotludo/akhq:0.18.0
261     labels:
262       - "traefik.enable=true"
263       - "traefik.http.routers.akhq.rule=Host(`akhq.localhost`)"
264       - "traefik.http.routers.akhq.entrypoints=web"
265     expose:
266       - 8080
267     environment:
268       AKHQ_CONFIGURATION: |
269         akhq:
270           connections:
271             docker-kafka-server:
272               properties:
273                 bootstrap.servers: "kafka:9092"