Event-Driven архитектура и Kafka: ключевые темы

Этот набор карточек охватывает ключевые аспекты event-driven архитектуры и работы с Apache Kafka — от базовых концепций до практических решений, применяемых в продакшене. Вы разберётесь в различиях choreography и orchestration, принципах работы consumer groups, управлении offset и стратегиях доставки сообщений (at-most-once, at-least-once, exactly-once). Отдельное внимание уделено важным архитектурным вопросам: выбор partition key, границы доменов (bounded context), эволюция схем событий и снижение связанности между сервисами. Набор также включает практические темы: outbox pattern, идемпотентность, обработка ошибок (retry, DLQ, poison messages), наблюдаемость (метрики, логи, трассировка) и управление порядком событий. Подходит для подготовки к собеседованиям, системного дизайна и углубления знаний в построении распределённых систем. Поможет структурировать знания и применять их на практике.

Перед началом обучения вы можете пройти тест, чтобы выявить пропущенные знания.

Пройти тест

Вы можете начать изучение этого набора. Вам будет отправлено 80 сообщений для повторения каждой карточки несколько раз в соответствие с кривой забывания.

Узнайте больше о методе интервального повторения.

Запланируйте ежедневные повторения карточек на случай если вам нужно запомнить за короткий срок или довести эти знания до автоматического уровня.

Узнайте больше о ежедневных практиках.
Событие vs Команда в event-driven архитектуре

Что такое событие в event-driven архитектуре и чем оно отличается от команды: факты, иммутабельность, владение (bounded context) и нейминг (OrderCreated vs CreateOrder).

1/20
Границы доменов, события, ACL и снижение связанности

Как определить границы доменов (bounded context) и какие события должны быть публичными или приватными, включая использование anti-corruption layer и способы минимизации связанности между сервисами?

2/20
Проектирование топиков в Apache Kafka

Как правильно проектировать топики в Apache Kafka, включая выбор между стратегиями (по домену или по типу события), naming conventions и анти-паттерны вроде “одного общего топика”?

3/20
Выбор partition key: порядок внутри partition и компромиссы

Как выбрать partition key, учитывая, что порядок гарантируется только внутри partition, и какие компромиссы возникают между балансировкой нагрузки и сохранением порядка (например, userId vs orderId)?

4/20
Порядок событий в Apache Kafka

Как работает порядок событий в Kafka, почему нет глобального порядка и какие подходы используются для строгой последовательности обработки?

5/20
Consumer group, 1 partition = 1 consumer, ребаланс и масштабирование

Краткое объяснение принципов работы consumer group, правила 1 partition = 1 consumer, что происходит при ребалансировке и ограничения масштабирования по количеству partition.

6/20
Kafka: offset и управление чтением

Коротко про offset в Kafka и как им управлять при чтении сообщений: что такое offset, где хранится позиция потребителя, как работают manual/auto commit и в чём разница между at-most-once, at-least-once и effectively-once (точно-один раз).

7/20
Идемпотентность обработки событий

Как обеспечить идемпотентность обработки событий и бороться с дубликатами?

8/20
Exactly-once в Kafka: что это, как работает и почему чаще используют at-least-once + идемпотентность

Что означает exactly-once семантика в Kafka, как она реализуется (transactional producer + consumer), и почему на практике чаще используется at-least-once с идемпотентной обработкой?

9/20
Обработка ошибок и «битые» сообщения — ретраи, DLQ и poison messages

Как обрабатывать ошибки и «битые» сообщения, включая стратегии ретраев (immediate, exponential backoff), использование DLQ и работу с poison message?

10/20
Эволюция схем событий (schema evolution)

Как управлять схемами событий: рекомендации по backward/forward compatibility, добавлению и удалению полей и подходам к versioning.

11/20
Eventual consistency (консистентность по окончанию)

Кратко: что такое eventual consistency, как она влияет на архитектуру (например, read model vs write model) и какие подходы применяют для управления несогласованностью данных.

12/20
Choreography и Orchestration в event-driven архитектуре

В чем разница между choreography и orchestration в event-driven архитектуре?

13/20
Outbox pattern

Что такое outbox pattern и как он помогает гарантировать доставку событий при записи в БД и публикации в Kafka.

14/20
Обработка конкуренции и порядок между событиями

Как обрабатывать конкуренцию и порядок между событиями: race conditions, optimistic locking, versioning и стратегии вроде last-write-wins?

15/20
Наблюдаемость (observability)

Как обеспечить наблюдаемость системы: собирать релевантные метрики (consumer lag, throughput, retry count, DLQ size), вести распределённую трассировку с корреляционным идентификатором и измерять end-to-end latency через метрики и трассы. Комбинируйте метрики, логи и трассы (M-L-T) для быстрого диагностики и автоматических оповещений.

16/20
Event time vs Processing time: влияние на поздних событий, окон и аналитики

В чем разница между event time и processing time и почему это важно для поздних событий, оконных вычислений и аналитики?

17/20
Kafka: когда подходит и когда избыточен

В каких случаях Kafka — хороший выбор, а когда она избыточна для проекта?

18/20
Анти-паттерны в event-driven архитектуре

Короткий обзор основных анти-паттернов в event-driven архитектуре и как их предотвращать.

19/20
Жизненный цикл события (end-to-end)

Как выглядит полный жизненный цикл события: producer → topic → partition → consumer, включая сериализацию, обработку, побочные эффекты и commit offset?

20/20
WitSlice © 2026