-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMakefile
More file actions
257 lines (217 loc) · 9.21 KB
/
Copy pathMakefile
File metadata and controls
257 lines (217 loc) · 9.21 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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
# Makefile pour kafka-cheat-code
# Simplifie l'utilisation des scripts et commandes Kafka
.PHONY: help install start stop restart status logs \
topic-create topic-list topic-describe topic-delete \
groups group reset \
test-producer test-consumer test-batch test-compression \
test-full test-cleanup \
analyze-full analyze-health analyze-offsets analyze-size \
producer consumer \
check clean
# Variables
KAFKA_HOME ?= /opt/kafka
KAFKA_SERVER ?= localhost:9092
SCRIPTS_DIR = kafka/scripts
EXAMPLES_DIR = kafka/examples
# Couleurs pour l'affichage
BLUE = \033[0;34m
GREEN = \033[0;32m
YELLOW = \033[1;33m
NC = \033[0m
#==============================================================================
# Aide
#==============================================================================
help:
@echo "$(BLUE)=== Kafka Cheat Code - Makefile ===$(NC)"
@echo ""
@echo "$(GREEN)Setup:$(NC)"
@echo " make install - Install the Python dependencies"
@echo " make check - Verify prerequisites (Java, Kafka, Python)"
@echo ""
@echo "$(GREEN)Broker:$(NC)"
@echo " make start - Start the broker (KRaft: formats storage on first run)"
@echo " make stop - Stop the broker"
@echo " make restart - Restart the broker"
@echo " make status - Mode (KRaft/ZooKeeper), processes and ports"
@echo " make logs - Tail the broker logs"
@echo ""
@echo "$(GREEN)Topics:$(NC)"
@echo " make topic-create TOPIC=name [PARTITIONS=3] [REPLICATION=1]"
@echo " make topic-list - List every topic"
@echo " make topic-describe TOPIC=name"
@echo " make topic-delete TOPIC=name"
@echo ""
@echo "$(GREEN)Consumer groups:$(NC)"
@echo " make groups - List every consumer group"
@echo " make group GROUP=name - Lag, offsets and members for one group"
@echo " make reset TOPIC=name GROUP=group [TO=earliest|latest]"
@echo ""
@echo "$(GREEN)Benchmarks:$(NC)"
@echo " make test-producer [TOPIC=name]"
@echo " make test-consumer [TOPIC=name]"
@echo " make test-full [TOPIC=name]"
@echo " make test-cleanup - Remove the benchmark topics"
@echo ""
@echo "$(GREEN)Analysis:$(NC)"
@echo " make analyze-full TOPIC=name"
@echo " make analyze-health TOPIC=name"
@echo ""
@echo "$(GREEN)Python examples:$(NC)"
@echo " make producer - Run the producer example"
@echo " make consumer - Run the consumer example"
@echo ""
@echo "$(GREEN)Environment variables:$(NC)"
@echo " KAFKA_HOME=$(KAFKA_HOME)"
@echo " KAFKA_SERVER=$(KAFKA_SERVER)"
#==============================================================================
# Installation et vérification
#==============================================================================
install:
@echo "$(BLUE)Installation des dépendances Python...$(NC)"
pip install -r requirements.txt
@echo "$(GREEN)Installation terminée$(NC)"
check:
@echo "$(BLUE)Vérification des prérequis...$(NC)"
@echo ""
@echo "Java (Kafka 4.x exige Java 17 ou plus):"
@if command -v java >/dev/null 2>&1; then \
java -version 2>&1 | head -1; \
major=$$(java -version 2>&1 | head -1 | sed -E 's/.*version "([0-9]+).*/\1/'); \
case "$$major" in \
''|*[!0-9]*) ;; \
*) [ "$$major" -lt 17 ] && echo " [ATTENTION] Java $$major detecté, Kafka 4.x exige Java 17+" || true;; \
esac; \
else \
echo " [MANQUANT] Java n'est pas installé"; \
fi
@echo ""
@echo "Kafka:"
@if [ -d "$(KAFKA_HOME)" ]; then \
echo " [OK] KAFKA_HOME=$(KAFKA_HOME)"; \
else \
echo " [MANQUANT] KAFKA_HOME=$(KAFKA_HOME) n'existe pas"; \
fi
@if [ -x "$(KAFKA_HOME)/bin/kafka-topics.sh" ]; then \
echo " [OK] kafka-topics.sh trouvé dans $(KAFKA_HOME)/bin"; \
elif command -v kafka-topics.sh >/dev/null 2>&1 || command -v kafka-topics >/dev/null 2>&1; then \
echo " [OK] kafka-topics disponible dans le PATH"; \
else \
echo " [MANQUANT] kafka-topics introuvable (ni dans $(KAFKA_HOME)/bin, ni dans le PATH)"; \
fi
@echo ""
@echo "Python:"
@command -v python3 >/dev/null 2>&1 && python3 --version || echo " [MANQUANT] Python3 n'est pas installé"
@python3 -c "import kafka" 2>/dev/null && echo " [OK] kafka-python installé" || echo " [MANQUANT] kafka-python (pip install kafka-python)"
@echo ""
#==============================================================================
# Gestion Kafka
#==============================================================================
start:
@KAFKA_HOME=$(KAFKA_HOME) $(SCRIPTS_DIR)/quick-start.sh start
stop:
@KAFKA_HOME=$(KAFKA_HOME) $(SCRIPTS_DIR)/quick-start.sh stop
restart:
@KAFKA_HOME=$(KAFKA_HOME) $(SCRIPTS_DIR)/quick-start.sh restart
status:
@KAFKA_HOME=$(KAFKA_HOME) $(SCRIPTS_DIR)/quick-start.sh status
logs:
@KAFKA_HOME=$(KAFKA_HOME) $(SCRIPTS_DIR)/quick-start.sh logs
#==============================================================================
# Gestion des Topics
#==============================================================================
topic-create:
ifndef TOPIC
$(error TOPIC est requis. Usage: make topic-create TOPIC=mon-topic)
endif
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/topic-manager.sh create \
-t $(TOPIC) \
-p $(or $(PARTITIONS),3) \
-r $(or $(REPLICATION),1)
topic-list:
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/topic-manager.sh list
topic-describe:
ifndef TOPIC
$(error TOPIC est requis. Usage: make topic-describe TOPIC=mon-topic)
endif
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/topic-manager.sh describe -t $(TOPIC)
topic-delete:
ifndef TOPIC
$(error TOPIC est requis. Usage: make topic-delete TOPIC=mon-topic)
endif
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/topic-manager.sh delete -t $(TOPIC)
#==============================================================================
# Consumer Groups
#==============================================================================
groups:
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/topic-manager.sh groups
group:
ifndef GROUP
$(error GROUP est requis. Usage: make group GROUP=mon-groupe)
endif
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/topic-manager.sh group -g $(GROUP)
reset:
ifndef TOPIC
$(error TOPIC est requis)
endif
ifndef GROUP
$(error GROUP est requis)
endif
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/topic-manager.sh reset \
-t $(TOPIC) \
-g $(GROUP) \
--to-$(or $(TO),earliest)
#==============================================================================
# Tests de Performance
#==============================================================================
test-producer:
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/performance-tests.sh producer $(or $(TOPIC),perf-test)
test-consumer:
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/performance-tests.sh consumer $(or $(TOPIC),perf-test)
test-full:
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/performance-tests.sh full $(or $(TOPIC),perf-test)
test-batch:
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/performance-tests.sh batch $(or $(TOPIC),perf-test)
test-compression:
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/performance-tests.sh compression $(or $(TOPIC),perf-test)
test-cleanup:
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/performance-tests.sh cleanup
#==============================================================================
# Analyse des Topics
#==============================================================================
analyze-full:
ifndef TOPIC
$(error TOPIC est requis. Usage: make analyze-full TOPIC=mon-topic)
endif
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/topic-analyzer.sh full $(TOPIC)
analyze-health:
ifndef TOPIC
$(error TOPIC est requis. Usage: make analyze-health TOPIC=mon-topic)
endif
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/topic-analyzer.sh health $(TOPIC)
analyze-offsets:
ifndef TOPIC
$(error TOPIC est requis. Usage: make analyze-offsets TOPIC=mon-topic)
endif
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/topic-analyzer.sh offsets $(TOPIC)
analyze-size:
ifndef TOPIC
$(error TOPIC est requis. Usage: make analyze-size TOPIC=mon-topic)
endif
@KAFKA_HOME=$(KAFKA_HOME) KAFKA_SERVER=$(KAFKA_SERVER) $(SCRIPTS_DIR)/topic-analyzer.sh size $(TOPIC)
#==============================================================================
# Exemples Python
#==============================================================================
producer:
@echo "$(BLUE)Lancement de l'exemple producteur...$(NC)"
@KAFKA_BOOTSTRAP_SERVERS=$(KAFKA_SERVER) python3 $(EXAMPLES_DIR)/producer-example.py
consumer:
@echo "$(BLUE)Lancement de l'exemple consommateur...$(NC)"
@KAFKA_BOOTSTRAP_SERVERS=$(KAFKA_SERVER) python3 $(EXAMPLES_DIR)/consumer-example.py
#==============================================================================
# Nettoyage
#==============================================================================
clean:
@echo "$(BLUE)Nettoyage...$(NC)"
@find . -type f -name "*.pyc" -delete
@find . -type d -name "__pycache__" -delete
@echo "$(GREEN)Nettoyage terminé$(NC)"