README
[demos/kafka/chat] / 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
19   kafka-1:
20     image: bitnami/kafka:3.3.1
21     environment:
22       KAFKA_ENABLE_KRAFT: 'yes'
23       KAFKA_KRAFT_CLUSTER_ID: r7dMBY60T16TrNCGeXniLw
24       KAFKA_CFG_PROCESS_ROLES: broker
25       KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
26       KAFKA_CFG_LISTENERS: BROKER://:9092, LOCALHOST://:9081
27       KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, CONTROLLER:PLAINTEXT, LOCALHOST:PLAINTEXT
28       KAFKA_CFG_ADVERTISED_LISTENERS: BROKER://kafka-1:9092, LOCALHOST://localhost:9081
29       KAFKA_BROKER_ID: 1
30       KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 0@kafka-0:9092
31       ALLOW_PLAINTEXT_LISTENER: 'yes'
32       KAFKA_CFG_INTER_BROKER_LISTENER_NAME: BROKER
33       KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
34       KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "false"
35     ports:
36       - 9081:9081
37     depends_on:
38       - kafka-0
39
40   kafka-2:
41     image: bitnami/kafka:3.3.1
42     environment:
43       KAFKA_ENABLE_KRAFT: 'yes'
44       KAFKA_KRAFT_CLUSTER_ID: r7dMBY60T16TrNCGeXniLw
45       KAFKA_CFG_PROCESS_ROLES: broker
46       KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
47       KAFKA_CFG_LISTENERS: BROKER://:9092, LOCALHOST://:9082
48       KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, CONTROLLER:PLAINTEXT, LOCALHOST:PLAINTEXT
49       KAFKA_CFG_ADVERTISED_LISTENERS: BROKER://kafka-2:9092, LOCALHOST://localhost:9082
50       KAFKA_BROKER_ID: 2
51       KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 0@kafka-0:9092
52       ALLOW_PLAINTEXT_LISTENER: 'yes'
53       KAFKA_CFG_INTER_BROKER_LISTENER_NAME: BROKER
54       KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
55       KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "false"
56     ports:
57       - 9092:9082
58       - 9082:9082
59     networks:
60       default:
61         aliases:
62           - kafka
63     depends_on:
64       - kafka-0
65
66   kafka-3:
67     image: bitnami/kafka:3.3.1
68     environment:
69       KAFKA_ENABLE_KRAFT: 'yes'
70       KAFKA_KRAFT_CLUSTER_ID: r7dMBY60T16TrNCGeXniLw
71       KAFKA_CFG_PROCESS_ROLES: broker
72       KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
73       KAFKA_CFG_LISTENERS: BROKER://:9092, LOCALHOST://:9083
74       KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, CONTROLLER:PLAINTEXT, LOCALHOST:PLAINTEXT
75       KAFKA_CFG_ADVERTISED_LISTENERS: BROKER://kafka-3:9092, LOCALHOST://localhost:9083
76       KAFKA_BROKER_ID: 3
77       KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 0@kafka-0:9092
78       ALLOW_PLAINTEXT_LISTENER: 'yes'
79       KAFKA_CFG_INTER_BROKER_LISTENER_NAME: BROKER
80       KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
81       KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "false"
82     ports:
83       - 9083:9083
84     depends_on:
85       - kafka-0
86
87   mongo:
88     image: mongo:4.4.13
89     volumes:
90       - ./0001.sh:/docker-entrypoint-initdb.d/0001.sh:ro
91       - ./chatRoomTo.json:/docker-entrypoint-initdb.d/chatRoomTo.json:ro
92     ports:
93       - 27017:27017
94
95   haproxy:
96     image: haproxy:2.7
97     volumes:
98       - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
99       - ./sharding.map:/usr/local/etc/haproxy/sharding.map:ro
100     sysctls:
101       net.ipv4.ip_unprivileged_port_start: 0
102     ports:
103       - 8080:8400
104       - 8401:8401
105       - 8404:8404
106
107   backend-1:
108     image: juplo/chat-backend:0.0.1-SNAPSHOT
109     environment:
110       chat.backend.inmemory.sharding-strategy: kafkalike
111       chat.backend.inmemory.num-shards: 10
112       chat.backend.inmemory.owned-shards: 1, 3, 4, 9
113       chat.backend.inmemory.storage-strategy: mongodb
114       spring.data.mongodb.host: mongo
115       spring.data.mongodb.database: test
116     ports:
117       - 8081:8080
118   backend-2:
119     image: juplo/chat-backend:0.0.1-SNAPSHOT
120     environment:
121       chat.backend.inmemory.sharding-strategy: kafkalike
122       chat.backend.inmemory.num-shards: 10
123       chat.backend.inmemory.owned-shards: 0, 2, 7
124       chat.backend.inmemory.storage-strategy: mongodb
125       spring.data.mongodb.host: mongo
126       spring.data.mongodb.database: test
127     ports:
128       - 8082:8080
129   backend-3:
130     image: juplo/chat-backend:0.0.1-SNAPSHOT
131     environment:
132       chat.backend.inmemory.sharding-strategy: kafkalike
133       chat.backend.inmemory.num-shards: 10
134       chat.backend.inmemory.owned-shards: 5, 6, 8
135       chat.backend.inmemory.storage-strategy: mongodb
136       spring.data.mongodb.host: mongo
137       spring.data.mongodb.database: test
138     ports:
139       - 8083:8080
140
141   setup:
142     image: juplo/toolbox
143     command: >
144       bash -c "
145         kafka-topics --bootstrap-server kafka:9092 --delete --if-exists --topic test
146         kafka-topics --bootstrap-server kafka:9092 --create --topic test --partitions 2 --replication-factor 3 --config min.insync.replicas=2
147         kafka-topics --bootstrap-server kafka:9092 --describe --topic test
148       "
149     depends_on:
150       - kafka-1
151       - kafka-2
152       - kafka-3
153
154   cli:
155     image: juplo/toolbox
156     command: sleep infinity
157     depends_on:
158       - kafka-1
159       - kafka-2
160       - kafka-3