b17afcf0264be116233bd3b1f95303679c038968
[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_OPTS:
25         -Dcom.sun.management.jmxremote=true
26         -Dcom.sun.management.jmxremote.port=9101
27         -Dcom.sun.management.jmxremote.authenticate=false
28     volumes:
29       - kafka-1-data:/var/lib/kafka/data
30     ports:
31       - 9081:9081
32     stop_grace_period: 120s
33     depends_on:
34       - zookeeper
35
36   kafka-2:
37     image: confluentinc/cp-kafka:7.5.1
38     environment:
39       KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
40       KAFKA_LISTENERS: BROKER://:9092, LOCALHOST://:9082
41       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, LOCALHOST:PLAINTEXT
42       KAFKA_ADVERTISED_LISTENERS: BROKER://kafka-2:9092, LOCALHOST://localhost:9082
43       KAFKA_BROKER_ID: 2
44       KAFKA_INTER_BROKER_LISTENER_NAME: BROKER
45       KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
46       KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
47       KAFKA_OPTS:
48         -Dcom.sun.management.jmxremote=true
49         -Dcom.sun.management.jmxremote.port=9101
50         -Dcom.sun.management.jmxremote.authenticate=false
51     volumes:
52       - kafka-2-data:/var/lib/kafka/data
53     ports:
54       - 9092:9082
55       - 9082:9082
56     networks:
57       default:
58         aliases:
59           - kafka
60     stop_grace_period: 120s
61     depends_on:
62       - zookeeper
63
64   kafka-3:
65     image: confluentinc/cp-kafka:7.5.1
66     environment:
67       KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
68       KAFKA_LISTENERS: BROKER://:9092, LOCALHOST://:9083
69       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, LOCALHOST:PLAINTEXT
70       KAFKA_ADVERTISED_LISTENERS: BROKER://kafka-3:9092, LOCALHOST://localhost:9083
71       KAFKA_BROKER_ID: 3
72       KAFKA_INTER_BROKER_LISTENER_NAME: BROKER
73       KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
74       KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
75       KAFKA_OPTS:
76         -Dcom.sun.management.jmxremote=true
77         -Dcom.sun.management.jmxremote.port=9101
78         -Dcom.sun.management.jmxremote.authenticate=false
79     volumes:
80       - kafka-3-data:/var/lib/kafka/data
81     ports:
82       - 9083:9083
83     stop_grace_period: 120s
84     depends_on:
85       - zookeeper
86
87   schema-registry:
88     image: confluentinc/cp-schema-registry:7.5.1
89     environment:
90       SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: kafka-1:9092,kafka-2:9092,kafka-3:9092
91       SCHEMA_REGISTRY_HOST_NAME: schema-registry
92       SCHEMA_REGISTRY_LISTENERS: http://0.0.0.0:8085
93       SCHEMA_REGISTRY_LOG4J_ROOT_LOGLEVEL: INFO
94     ports:
95       - 8085:8085
96     depends_on:
97       - kafka-1
98       - kafka-2
99       - kafka-3
100
101   connect:
102     image: confluentinc/cp-kafka-connect:7.5.1
103     environment:
104       CONNECT_BOOTSTRAP_SERVERS: kafka-1:9092,kafka-2:9092,kafka-3:9092
105       CONNECT_REST_PORT: 8083
106       CONNECT_REST_LISTENERS: http://0.0.0.0:8083
107       CONNECT_REST_ADVERTISED_HOST_NAME: connect
108       CONNECT_CONFIG_STORAGE_TOPIC: __connect-config
109       CONNECT_OFFSET_STORAGE_TOPIC: __connect-offsets
110       CONNECT_STATUS_STORAGE_TOPIC: __connect-status
111       CONNECT_GROUP_ID: kafka-connect
112       CONNECT_KEY_CONVERTER_SCHEMAS_ENABLE: "true"
113       CONNECT_KEY_CONVERTER: io.confluent.connect.avro.AvroConverter
114       CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8085
115       CONNECT_VALUE_CONVERTER_SCHEMAS_ENABLE: "true"
116       CONNECT_VALUE_CONVERTER: io.confluent.connect.avro.AvroConverter
117       CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8085
118       CONNECT_INTERNAL_KEY_CONVERTER: org.apache.kafka.connect.json.JsonConverter
119       CONNECT_INTERNAL_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter
120       CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
121       CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
122       CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
123       CONNECT_PLUGIN_PATH: /usr/share/java/
124     ports:
125       - 8083:8083
126     depends_on:
127       - schema-registry
128
129   cli:
130     image: juplo/toolbox
131     command: sleep infinity
132     stop_grace_period: 0s
133     depends_on:
134       - kafka-1
135       - kafka-2
136       - kafka-3
137
138   setup:
139     image: juplo/toolbox
140     command:
141       - bash
142       - -c
143       - |
144         cub kafka-ready -b kafka-1:9092,kafka-2:9092,kafka-3:9092 3 60 > /dev/null 2>&1 || exit 1
145         if [ -e INITIALIZED ]
146         then
147           echo -n Bereits konfiguriert: 
148           cat INITIALIZED
149           kafka-topics --bootstrap-server kafka:9092 --describe --topic test
150         else
151           kafka-topics --bootstrap-server kafka:9092 \
152                        --delete \
153                        --if-exists \
154                        --topic test
155           kafka-topics --bootstrap-server kafka:9092 \
156                        --create \
157                        --topic test \
158                        --partitions 2 \
159                        --replication-factor 3 \
160                        --config min.insync.replicas=2 \
161           && echo Das Topic \'test\' wurde erfolgreich angelegt: \
162           && kafka-topics --bootstrap-server kafka:9092 --describe --topic test \
163           && date > INITIALIZED
164         fi
165     stop_grace_period: 0s
166     depends_on:
167       - cli
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 volumes:
191   zookeeper-data:
192   zookeeper-log:
193   kafka-1-data:
194   kafka-2-data:
195   kafka-3-data: