WIP
[demos/kafka/training] / docker-compose.yml
1 version: '3.2'
2 services:
3   kafka-0:
4     image: bitnami/kafka:3.3.1
5     environment:
6       KAFKA_ENABLE_KRAFT: 'yes'
7       KAFKA_KRAFT_CLUSTER_ID: r7dMBY60T16TrNCGeXniLw
8       KAFKA_CFG_PROCESS_ROLES: controller
9       KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
10       KAFKA_CFG_LISTENERS: CONTROLLER://:9092
11       KAFKA_CFG_ADVERTISED_LISTENERS: " "
12       KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT
13       KAFKA_BROKER_ID: 0
14       KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 0@kafka-0:9092
15       ALLOW_PLAINTEXT_LISTENER: 'yes'
16       KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
17       KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "false"
18     healthcheck:
19       test: [ "CMD", "kafka-topics.sh", "--bootstrap-server", ":9092", "--list" ]
20
21   kafka-1:
22     image: bitnami/kafka:3.3.1
23     environment:
24       KAFKA_ENABLE_KRAFT: 'yes'
25       KAFKA_KRAFT_CLUSTER_ID: r7dMBY60T16TrNCGeXniLw
26       KAFKA_CFG_PROCESS_ROLES: broker
27       KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
28       KAFKA_CFG_LISTENERS: BROKER://:9092, LOCALHOST://:9081
29       KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, CONTROLLER:PLAINTEXT, LOCALHOST:PLAINTEXT
30       KAFKA_CFG_ADVERTISED_LISTENERS: BROKER://kafka-1:9092, LOCALHOST://localhost:9081
31       KAFKA_BROKER_ID: 1
32       KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 0@kafka-0:9092
33       ALLOW_PLAINTEXT_LISTENER: 'yes'
34       KAFKA_CFG_INTER_BROKER_LISTENER_NAME: BROKER
35       KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
36       KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "false"
37     ports:
38       - 9081:9081
39     healthcheck:
40       test: [ "CMD", "kafka-topics.sh", "--bootstrap-server", ":9092", "--list" ]
41     depends_on:
42       kafka-0:
43         condition: service_healthy
44
45   kafka-2:
46     image: bitnami/kafka:3.3.1
47     environment:
48       KAFKA_ENABLE_KRAFT: 'yes'
49       KAFKA_KRAFT_CLUSTER_ID: r7dMBY60T16TrNCGeXniLw
50       KAFKA_CFG_PROCESS_ROLES: broker
51       KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
52       KAFKA_CFG_LISTENERS: BROKER://:9092, LOCALHOST://:9082
53       KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, CONTROLLER:PLAINTEXT, LOCALHOST:PLAINTEXT
54       KAFKA_CFG_ADVERTISED_LISTENERS: BROKER://kafka-2:9092, LOCALHOST://localhost:9082
55       KAFKA_BROKER_ID: 2
56       KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 0@kafka-0:9092
57       ALLOW_PLAINTEXT_LISTENER: 'yes'
58       KAFKA_CFG_INTER_BROKER_LISTENER_NAME: BROKER
59       KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
60       KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "false"
61     ports:
62       - 9092:9082
63       - 9082:9082
64     networks:
65       default:
66         aliases:
67           - kafka
68     healthcheck:
69       test: [ "CMD", "kafka-topics.sh", "--bootstrap-server", ":9092", "--list" ]
70     depends_on:
71       kafka-0:
72         condition: service_healthy
73
74   kafka-3:
75     image: bitnami/kafka:3.3.1
76     environment:
77       KAFKA_ENABLE_KRAFT: 'yes'
78       KAFKA_KRAFT_CLUSTER_ID: r7dMBY60T16TrNCGeXniLw
79       KAFKA_CFG_PROCESS_ROLES: broker
80       KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
81       KAFKA_CFG_LISTENERS: BROKER://:9092, LOCALHOST://:9083
82       KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, CONTROLLER:PLAINTEXT, LOCALHOST:PLAINTEXT
83       KAFKA_CFG_ADVERTISED_LISTENERS: BROKER://kafka-3:9092, LOCALHOST://localhost:9083
84       KAFKA_BROKER_ID: 3
85       KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 0@kafka-0:9092
86       ALLOW_PLAINTEXT_LISTENER: 'yes'
87       KAFKA_CFG_INTER_BROKER_LISTENER_NAME: BROKER
88       KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
89       KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "false"
90     ports:
91       - 9083:9083
92     healthcheck:
93       test: [ "CMD", "kafka-topics.sh", "--bootstrap-server", ":9092", "--list" ]
94     depends_on:
95       kafka-0:
96         condition: service_healthy
97
98   setup:
99     image: juplo/toolbox
100     command: >
101       bash -c "
102         kafka-topics --bootstrap-server kafka:9092 --delete --if-exists --topic test
103         kafka-topics --bootstrap-server kafka:9092 --create --topic test --partitions 2 --replication-factor 3 --config min.insync.replicas=2
104         kafka-topics --bootstrap-server kafka:9092 --describe --topic test
105       "
106     depends_on:
107       kafka-1:
108         condition: service_healthy
109       kafka-2:
110         condition: service_healthy
111       kafka-3:
112         condition: service_healthy
113
114   cli:
115     image: juplo/toolbox
116     command: sleep infinity
117
118   producer:
119     image: juplo/simple-producer:1.0-SNAPSHOT
120     command: producer
121     depends_on:
122       kafka-1:
123         condition: service_healthy
124       kafka-2:
125         condition: service_healthy
126       kafka-3:
127         condition: service_healthy
128
129   consumer-1:
130     image: juplo/simple-consumer:1.0-SNAPSHOT
131     command: kafka:9092 test my-group consumer-1
132     depends_on:
133       kafka-1:
134         condition: service_healthy
135       kafka-2:
136         condition: service_healthy
137       kafka-3:
138         condition: service_healthy
139
140   consumer-2:
141     image: juplo/simple-consumer:1.0-SNAPSHOT
142     command: kafka:9092 test my-group consumer-2
143     depends_on:
144       kafka-1:
145         condition: service_healthy
146       kafka-2:
147         condition: service_healthy
148       kafka-3:
149         condition: service_healthy
150
151   consumer-3:
152     image: juplo/simple-consumer:1.0-SNAPSHOT
153     command: kafka:9092 test my-group consumer-3
154     depends_on:
155       kafka-1:
156         condition: service_healthy
157       kafka-2:
158         condition: service_healthy
159       kafka-3:
160         condition: service_healthy
161
162   spikzettel:
163     image: juplo/toolbox
164     command: >
165       bash -c '
166         kafka-console-consumer \
167           --bootstrap-server kafka:9092 \
168           --topic __consumer_offsets --from-beginning \
169           --formatter "kafka.coordinator.group.GroupMetadataManager\$$OffsetsMessageFormatter"
170       '
171     depends_on:
172       kafka-1:
173         condition: service_healthy
174       kafka-2:
175         condition: service_healthy
176       kafka-3:
177         condition: service_healthy