WIP
[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.1.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.5
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.1.5
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.2.14
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.1.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:1.0.5
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
107   bart:
108     image: juplo/wordcount--fortune:1.0.0
109     command: bash -c "
110       while [ true ];
111       do
112         /usr/games/fortune chalkboard
113           | head -1
114           | http -v recorder:8081/bart;
115         echo;
116         sleep 1;
117       done"
118
119   nerd:
120     image: juplo/wordcount--fortune:1.0.0
121     command: bash -c "
122       while [ true ];
123       do
124         /usr/games/fortune computers
125           | grep  -v '^[[:space:]]*--'
126           | http -v recorder:8081/nerd;
127         echo;
128         sleep 1;
129       done"
130
131   riddler:
132     image: juplo/wordcount--fortune:1.0.0
133     command: bash -c "
134       while [ true ];
135       do
136         /usr/games/fortune riddles
137           | awk -F':' '/^Q/ { print $$2 }'
138           | http -v recorder:8081/riddler;
139         echo;
140         sleep 1;
141       done"
142
143
144   cli:
145     image: juplo/toolbox
146     command: sleep infinity
147     stop_grace_period: 0s
148     depends_on:
149       - kafka
150       - traefik
151
152   setup:
153     image: juplo/toolbox
154     command:
155       - bash
156       - -c
157       - |
158         cub kafka-ready -b kafka:9092 1 60 > /dev/null 2>&1 || exit 1
159         if [ -e INITIALIZED ]
160         then
161           echo -n Bereits konfiguriert:
162           cat INITIALIZED
163           kafka-topics --bootstrap-server kafka:9092 --describe --topic users
164           kafka-topics --bootstrap-server kafka:9092 --describe --topic recordings
165           kafka-topics --bootstrap-server kafka:9092 --describe --topic words
166           kafka-topics --bootstrap-server kafka:9092 --describe --topic countings
167           kafka-topics --bootstrap-server kafka:9092 --describe --topic top10
168         else
169           kafka-topics --bootstrap-server kafka:9092 \
170                        --delete \
171                        --if-exists \
172                        --topic users
173           kafka-topics --bootstrap-server kafka:9092 \
174                        --delete \
175                        --if-exists \
176                        --topic recordings
177           kafka-topics --bootstrap-server kafka:9092 \
178                        --delete \
179                        --if-exists \
180                        --topic words
181           kafka-topics --bootstrap-server kafka:9092 \
182                        --delete \
183                        --if-exists \
184                        --topic countings
185           kafka-topics --bootstrap-server kafka:9092 \
186                        --delete \
187                        --if-exists \
188                        --topic top10
189           kafka-topics --bootstrap-server kafka:9092 \
190                        --create \
191                        --topic users \
192                        --partitions 3 \
193                        --replication-factor 1 \
194                        --config min.insync.replicas=1 \
195           && echo Das Topic \'users\' wurde erfolgreich angelegt: \
196           && kafka-topics --bootstrap-server kafka:9092 --describe --topic users \
197           && kafka-topics --bootstrap-server kafka:9092 \
198                        --create \
199                        --topic recordings \
200                        --partitions 3 \
201                        --replication-factor 1 \
202                        --config min.insync.replicas=1 \
203           && echo Das Topic \'recordings\' wurde erfolgreich angelegt: \
204           && kafka-topics --bootstrap-server kafka:9092 --describe --topic recordings \
205           && kafka-topics --bootstrap-server kafka:9092 \
206                        --create \
207                        --topic words \
208                        --partitions 3 \
209                        --replication-factor 1 \
210                        --config min.insync.replicas=1 \
211           && echo Das Topic \'words\' wurde erfolgreich angelegt: \
212           && kafka-topics --bootstrap-server kafka:9092 --describe --topic words \
213           && kafka-topics --bootstrap-server kafka:9092 \
214                        --create \
215                        --topic countings \
216                        --partitions 3 \
217                        --replication-factor 1 \
218                        --config min.insync.replicas=1 \
219           && echo Das Topic \'countings\' wurde erfolgreich angelegt: \
220           && kafka-topics --bootstrap-server kafka:9092 --describe --topic countings \
221           && kafka-topics --bootstrap-server kafka:9092 \
222                        --create \
223                        --topic top10 \
224                        --partitions 3 \
225                        --replication-factor 1 \
226                        --config min.insync.replicas=1 \
227           && echo Das Topic \'top10\' wurde erfolgreich angelegt: \
228           && kafka-topics --bootstrap-server kafka:9092 --describe --topic top10 \
229           && date > INITIALIZED
230         fi
231     stop_grace_period: 0s
232     depends_on:
233       - cli
234
235   akhq:
236     image: tchiotludo/akhq:0.18.0
237     labels:
238       - "traefik.enable=true"
239       - "traefik.http.routers.akhq.rule=Host(`akhq.localhost`)"
240       - "traefik.http.routers.akhq.entrypoints=web"
241     expose:
242       - 8080
243     environment:
244       AKHQ_CONFIGURATION: |
245         akhq:
246           connections:
247             docker-kafka-server:
248               properties:
249                 bootstrap.servers: "kafka:9092"