-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
140 lines (120 loc) · 5.37 KB
/
docker-compose.yml
File metadata and controls
140 lines (120 loc) · 5.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
services:
# ========== DATABASE (Her zaman çalışır) ==========
protectedpayment.database:
image: postgres:latest
container_name: ProtectedPayment.Database
restart: always
volumes:
- ./.containers/database:/var/lib/postgresql
ports:
- 15432:5432
# ========== RabbitMQ ==========
protectedpayment.queue.rabbitmq:
image: rabbitmq:management-alpine
container_name: ProtectedPayment.Queue.RabbitMQ
restart: always
hostname: protected-payment-queue-rabbitmq
volumes:
- ./.containers/queue/data/:/var/lib/rabbitmq
- ./.containers/queue/log/:/var/log/rabbitmq
environment:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
ports:
- 5672:5672
- 15672:15672
# ========== KAFKA ==========
protectedpayment.queue.kafka:
image: confluentinc/cp-kafka:7.6.0
container_name: ProtectedPayment.Queue.Kafka
ports:
- "9094:9094"
- "9092:9092"
environment:
# ======= KRaft Mode Ayarları =======
# KRaft: Kafka Raft, Kafka'nın Zookeeper'sız çalışmasını sağlar
# Apache Kafka 3.x ile gelen yeni consensus protokolü
# Bu Kafka node'unun benzersiz ID'si (cluster içinde unique olmalı)
KAFKA_NODE_ID: 1
# Bu node'un rolleri: hem broker (mesaj işler) hem controller (cluster yönetir)
# broker: Mesajları producer'lardan alır ve consumer'lara dağıtır
# controller: Cluster metadata'sını ve lider seçimlerini yönetir
KAFKA_PROCESS_ROLES: broker,controller
# Controller quorum (çoğunluk) yapılandırması
# Format: node_id@hostname:port
# 1@kafka:9093 = ID'si 1 olan controller, kafka hostname'inde 9093 portunda
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@protectedpayment.queue.kafka:9093
# Controller iletişimi için kullanılacak listener ismi
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
# ======= Listener (Dinleyici) Ayarları =======
# Listener: Kafka'nın bağlantıları dinlediği network arayüzleri
# Kafka'nın dinleyeceği tüm endpoint'ler
# PLAINTEXT://0.0.0.0:9092 - Container içi iletişim (şifreleme yok)
# CONTROLLER://0.0.0.0:9093 - Controller'lar arası iletişim
# EXTERNAL://0.0.0.0:9094 - Dışarıdan (localhost) erişim
# 0.0.0.0 = Tüm network interface'lerini dinle
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093,EXTERNAL://0.0.0.0:9094
# Client'lara duyurulan adresler (client'lar bu adreslere bağlanır)
# PLAINTEXT://kafka:9092 - Docker network içinden bağlananlar için
# EXTERNAL://localhost:9094 - Host makinesinden bağlananlar için
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://protectedpayment.queue.kafka:9092,EXTERNAL://localhost:9094
# Her listener için güvenlik protokolü mapping
# PLAINTEXT: Şifreleme yok, kimlik doğrulama yok (development için)
# Production'da SSL veya SASL kullanılmalı
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT
# Kafka broker'lar arası iletişim için kullanılacak listener
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
# ======= Cluster Ayarları =======
# KRaft mode için gerekli benzersiz cluster ID
# Bu ID, kafka-storage.sh random-uuid komutuyla üretilebilir
# Aynı cluster'daki tüm node'lar aynı CLUSTER_ID'ye sahip olmalı
CLUSTER_ID: MkU3OEVBNTcwNTJENDM2Qk
# ======= Storage (Depolama) Ayarları =======
# Kafka'nın log dosyalarını (mesajları) saklayacağı dizin
# Mesajlar burada segment dosyaları olarak saklanır
KAFKA_LOG_DIRS: /var/lib/kafka/data
# Offset topic için replication factor (kaç kopyası olacak)
# 1 = Tek replica (development için), production'da en az 3 olmalı
# Offset topic: Consumer'ların hangi mesajı okuduğunu takip eder
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
# Transaction state log için replication factor
# Transaction: Birden fazla mesajı atomik olarak gönderme/okuma
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
# Transaction log için minimum in-sync replica sayısı
# ISR (In-Sync Replica): Leader ile senkron olan replica'lar
# 1 = En az 1 replica senkron olmalı (development için)
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
volumes:
- kafka_data:/var/lib/kafka/data
protectedpayment.queue.kafka-ui:
container_name: ProtectedPayment.Queue.Kafka.UI
image: provectuslabs/kafka-ui:v0.7.2
ports:
- "8080:8080"
environment:
DYNAMIC_CONFIG_ENABLED: 'true'
KAFKA_CLUSTERS_0_NAME: local
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: protectedpayment.queue.kafka:9092
KAFKA_CLUSTERS_0_SCHEMAREGISTRY: http://schema-registry:8081
KAFKA_CLUSTERS_0_KSQLDBSERVER: http://ksqldb-server:8088
depends_on:
- protectedpayment.queue.kafka
# ========== Redis ==========
protectedpayment.queue.redis:
image: redis:7.2-alpine
container_name: ProtectedPayment.Queue.Redis
ports:
- "6379:6379"
command: >
redis-server
--appendonly yes
--appendfsync everysec
--save 60 1
volumes:
- redis_data:/data
restart: unless-stopped
volumes:
kafka_data:
driver: local
redis_data:
driver: local