Kafka и Event-Driven Architecture: Модули
Программа нацелена не просто на использование Kafka, а на понимание её поведения, достаточное для построения надёжной event-driven системы. Порядок, семантика доставки, идемпотентное потребление, transactional outbox и эволюция схем изучаются на реалистичных сбоях. Эксплуатация и мониторинг рассматриваются как часть дизайна.
01
Базовая модель Kafka
Понимаем, что даёт модель на основе лога и чего она не даёт.
- Topic, partition, segment и модель лога
- Репликация, leader и ISR
- Retention и log compaction
- Batching producer, acks и задержка
- Чем Kafka отличается от очереди
Лабораторная: Создать topic на локальном кластере и понаблюдать, как параметры partition и retention меняют поведение.
02
Порядок и партиционирование
Порядок сохраняется только внутри partition; превращаем этот факт в проектное решение.
- Ключ сообщения и partitioner
- Hot partition и перекос распределения
- Выбор числа partition и последствия его увеличения позже
- Как нарушается порядок (retry, несколько producer)
- Выбор ключа на основе предметной области
Лабораторная: Выбрать ключ, сохраняющий порядок событий одного клиента, и воспроизвести случай нарушения порядка.
03
Consumer group и rebalancing
Как consumer делят partition между собой и к чему это может привести.
- Consumer group и назначение partition
- Стратегии offset commit
- Виды rebalance и cooperative rebalancing
- max.poll.interval и проблема медленного consumer
- Consumer lag и предел параллелизма
Лабораторная: Замедлить consumer до шторма rebalance, найти причину в логах и метриках и исправить.
04
Семантика доставки и идемпотентное потребление
Дубликаты неизбежны; учимся писать consumer, устойчивые к ним.
- At-most-once, at-least-once, exactly-once
- Идемпотентный producer и транзакции Kafka
- Идемпотентность на стороне consumer: уникальный ключ и дедупликация
- Retry topic и dead letter topic
- Обработка poison message
Лабораторная: Написать consumer, получающий одно сообщение дважды, и тестом доказать, что эффект не применяется повторно.
05
Transactional outbox
Устраняем несогласованность между записью в базу и публикацией события.
- Проблема dual write
- Таблица outbox и polling publisher
- Подход на CDC (концепция Debezium)
- Очистка outbox и порядок
- Паттерн inbox
Лабораторная: Построить outbox в сервисе заказов и показать, что событие не теряется при падении сервиса и дубликаты обрабатываются.
06
Моделирование событий и эволюция схем
События — долгоживущие контракты; учимся менять их, не ломая потребителей.
- Event, command и state transfer
- Именование и состав событий
- Avro/Protobuf и Schema Registry
- Правила обратной и прямой совместимости
- Версионирование и жизнь со старыми событиями
Лабораторная: Добавить и удалить поле в существующей схеме события и понаблюдать, какое изменение отклонит проверка совместимости.
07
Choreography и orchestration
Сравниваем два способа координировать многошаговый бизнес-процесс через события.
- Choreography: преимущества и скрытая связность
- Orchestration: центральный контроль и его цена
- Видимость процесса и отладка
- Компенсация и обработка timeout
Лабораторная: Построить один и тот же бизнес-процесс двумя подходами и сравнить простоту трассировки и изменения.
08
Эксплуатация и мониторинг
Определяем, что нужно отслеживать, чтобы надёжно эксплуатировать систему на Kafka.
- Consumer lag и алертинг
- Метрики broker и topic
- Планирование ёмкости и цена retention
- Replay: повторная обработка событий
- Основы безопасности: аутентификация и ACL
Лабораторная: Настроить dashboard и правило алерта по consumer lag и проверить их сценарием, создающим lag.