Files
resume/stack/kafka/CASE.md

82 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Кейс: Kafka (домашняя однонодовая лаба)
Связь с легендой: [../../legend/LEGEND.md](../../legend/LEGEND.md) — раздел «Домашняя лаборатория / pet-проект». Kafka упоминалась только в требованиях вакансии Альфа-Банка и в вопросах Bi.Zone — в рабочем стеке компаний из резюме её нет, честный pet-кейс.
## Что нужно реально сделать (домашний стенд)
Однонодовый Kafka-брокер в режиме KRaft (без ZooKeeper — так проще для домашней лабы и это актуальная архитектура в новых версиях) в Docker, создать топик, погонять продюсера/консюмера через встроенные CLI-утилиты и замерить пропускную способность через `kafka-producer-perf-test`.
### 1. docker-compose.yml
```yaml
version: "3.8"
services:
kafka:
image: apache/kafka:3.7.0
container_name: kafka-lab
ports:
- "9092:9092"
environment:
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka-lab:9093
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
```
### 2. Создать топик и погонять продюсера/консюмера
```bash
docker compose up -d
docker exec -it kafka-lab /opt/kafka/bin/kafka-topics.sh \
--create --topic orders-events --bootstrap-server localhost:9092 \
--partitions 3 --replication-factor 1
# консюмер в одном терминале
docker exec -it kafka-lab /opt/kafka/bin/kafka-console-consumer.sh \
--topic orders-events --bootstrap-server localhost:9092 --group demo-group
# продюсер в другом терминале
docker exec -it kafka-lab /opt/kafka/bin/kafka-console-producer.sh \
--topic orders-events --bootstrap-server localhost:9092
```
Набрать несколько сообщений в продюсере — увидеть их в консюмере в реальном времени. Открыть второй консюмер с той же `--group demo-group` — увидеть, как партиции топика (3 штуки) распределяются между консюмерами внутри одной consumer group (каждое сообщение читается только одним консюмером из группы — это и есть горизонтальное масштабирование обработки).
### 3. Партиции и оффсеты
```bash
docker exec -it kafka-lab /opt/kafka/bin/kafka-topics.sh \
--describe --topic orders-events --bootstrap-server localhost:9092
docker exec -it kafka-lab /opt/kafka/bin/kafka-consumer-groups.sh \
--describe --group demo-group --bootstrap-server localhost:9092
```
Второй вывод показывает `CURRENT-OFFSET`/`LOG-END-OFFSET`/`LAG` на партицию — практическое понимание, как Kafka отслеживает, что консюмер уже прочитал, а что ещё нет.
### 4. Замер пропускной способности
```bash
docker exec -it kafka-lab /opt/kafka/bin/kafka-producer-perf-test.sh \
--topic orders-events --num-records 100000 --record-size 200 \
--throughput -1 --producer-props bootstrap.servers=localhost:9092
```
Записать полученные `records/sec` и `MB/sec` в [../../legend/CAPACITY.md](../../legend/CAPACITY.md) — честная лабная цифра для разговора про пропускную способность.
## Что это даёт в разговоре с интервьюером
- Понимание топика, партиции, consumer group, оффсета не как определений, а как наблюдаемого поведения (`--describe` показывает реальное распределение и лаг).
- Понимание, зачем нужны партиции — параллельная обработка внутри одной consumer group.
- Лабная цифра пропускной способности как честная база для разговора о производительности.
## Как это ложится в легенду
Kafka — pet-кейс, не приписанный к опыту в компаниях. Упоминается в резюме только в навыках как самостоятельно проработанная технология, без привязки к конкретному рабочему проекту.