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