1services:
2 zookeeper:
3 image: confluentinc/cp-zookeeper:7.6.0
4 hostname: zookeeper
5 container_name: zookeeper
6 ports:
7 - "2181:2181"
8 environment:
9 ZOOKEEPER_CLIENT_PORT: 2181
10 ZOOKEEPER_TICK_TIME: 2000
11 volumes:
12 - zookeeper-data:/var/lib/zookeeper/data
13 - zookeeper-logs:/var/lib/zookeeper/log
14
15 kafka1:
16 image: confluentinc/cp-kafka:7.6.0
17 hostname: kafka1
18 container_name: kafka1
19 depends_on:
20 - zookeeper
21 ports:
22 - "9092:9092"
23 - "9101:9101"
24 environment:
25 KAFKA_BROKER_ID: 1
26 KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
27 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
28 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:29092,PLAINTEXT_HOST://localhost:9092
29 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
30 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2
31 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
32 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
33 KAFKA_JMX_PORT: 9101
34 KAFKA_JMX_HOSTNAME: localhost
35 KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
36 volumes:
37 - kafka1-data:/var/lib/kafka/data
38
39 kafka2:
40 image: confluentinc/cp-kafka:7.6.0
41 hostname: kafka2
42 container_name: kafka2
43 depends_on:
44 - zookeeper
45 ports:
46 - "9093:9093"
47 - "9102:9102"
48 environment:
49 KAFKA_BROKER_ID: 2
50 KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
51 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
52 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:29093,PLAINTEXT_HOST://localhost:9093
53 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
54 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2
55 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
56 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
57 KAFKA_JMX_PORT: 9102
58 KAFKA_JMX_HOSTNAME: localhost
59 KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
60 volumes:
61 - kafka2-data:/var/lib/kafka/data
62
63 kafka3:
64 image: confluentinc/cp-kafka:7.6.0
65 hostname: kafka3
66 container_name: kafka3
67 depends_on:
68 - zookeeper
69 ports:
70 - "9094:9094"
71 - "9103:9103"
72 environment:
73 KAFKA_BROKER_ID: 3
74 KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
75 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
76 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:29094,PLAINTEXT_HOST://localhost:9094
77 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
78 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2
79 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
80 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
81 KAFKA_JMX_PORT: 9103
82 KAFKA_JMX_HOSTNAME: localhost
83 KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
84 volumes:
85 - kafka3-data:/var/lib/kafka/data
86
87 cassandra:
88 image: cassandra:5.0
89 hostname: cassandra
90 container_name: cassandra
91 ports:
92 - "9042:9042" # CQL native transport port
93 - "7000:7000" # Inter-node cluster communication
94 - "7199:7199" # JMX monitoring port
95 environment:
96 CASSANDRA_CLUSTER_NAME: 'MyCluster'
97 CASSANDRA_DC: 'dc1'
98 CASSANDRA_RACK: 'rack1'
99 CASSANDRA_ENDPOINT_SNITCH: 'GossipingPropertyFileSnitch'
100 CASSANDRA_NUM_TOKENS: 256
101 # Reduce memory usage for local development
102 MAX_HEAP_SIZE: '512M'
103 HEAP_NEWSIZE: '128M'
104 # Override JVM opts to limit direct memory to fit in container
105 JVM_OPTS: '-Xms512M -Xmx512M -XX:MaxDirectMemorySize=256M'
106 volumes:
107 - cassandra-data:/var/lib/cassandra
108 # Limit container memory (increased to accommodate heap + direct memory + overhead)
109 mem_limit: 2g
110 memswap_limit: 2g
111 # Disable swap for better performance
112 mem_swappiness: 0
113 # Allow memory locking (reduces warnings)
114 ulimits:
115 memlock: -1
116 nofile:
117 soft: 65536
118 hard: 65536
119 healthcheck:
120 test: ["CMD-SHELL", "cqlsh -e 'describe cluster'"]
121 interval: 30s
122 timeout: 10s
123 retries: 5
124
125 imgproxy:
126 image: darthsim/imgproxy:latest
127 hostname: imgproxy
128 container_name: imgproxy
129 ports:
130 - "9525:9525"
131 environment:
132 IMGPROXY_BIND: ":9525"
133 IMGPROXY_ONLY_PRESETS: "true"
134 IMGPROXY_BASE_URL: "http://localhost:9525"
135 IMGPROXY_USE_ETAG: "true"
136 IMGPROXY_PRESETS: "fullsize=resizing_type:fit/width:2000/height:2000/format:jpeg,thumb=resizing_type:fit/width:200/height:200/format:jpeg"
137 restart: unless-stopped
138
139volumes:
140 zookeeper-data:
141 zookeeper-logs:
142 kafka1-data:
143 kafka2-data:
144 kafka3-data:
145 cassandra-data: