Files
resume/stack/kafka/CASE.md

5.0 KiB
Raw Blame History

Кейс: Kafka (домашняя однонодовая лаба)

Связь с легендой: ../../legend/LEGEND.md — раздел «Домашняя лаборатория / pet-проект». Kafka упоминалась только в требованиях вакансии Альфа-Банка и в вопросах Bi.Zone — в рабочем стеке компаний из резюме её нет, честный pet-кейс.

Что нужно реально сделать (домашний стенд)

Однонодовый Kafka-брокер в режиме KRaft (без ZooKeeper — так проще для домашней лабы и это актуальная архитектура в новых версиях) в Docker, создать топик, погонять продюсера/консюмера через встроенные CLI-утилиты и замерить пропускную способность через kafka-producer-perf-test.

1. docker-compose.yml

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. Создать топик и погонять продюсера/консюмера

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. Партиции и оффсеты

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. Замер пропускной способности

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 — честная лабная цифра для разговора про пропускную способность.

Что это даёт в разговоре с интервьюером

  • Понимание топика, партиции, consumer group, оффсета не как определений, а как наблюдаемого поведения (--describe показывает реальное распределение и лаг).
  • Понимание, зачем нужны партиции — параллельная обработка внутри одной consumer group.
  • Лабная цифра пропускной способности как честная база для разговора о производительности.

Как это ложится в легенду

Kafka — pet-кейс, не приписанный к опыту в компаниях. Упоминается в резюме только в навыках как самостоятельно проработанная технология, без привязки к конкретному рабочему проекту.