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