7 вопросов
Apache Kafka - распределённая платформа для потоковой обработки событий. Топики, партиции, consumer groups, offset, гарантии доставки (at-least-once, exactly-once). Стандарт для микросервисных архитектур.
Kafka - распределённая платформа для потоковой обработки событий (event streaming). Не просто очередь - сообщения хранятся на диске и могут быть перечитаны. Используется для микросервисной коммуникации, логирования, ETL, event sourcing.
Подробнее →Топик делится на partition'ы - упорядоченные, неизменяемые последовательности сообщений. Партиции позволяют параллельную запись и чтение. Сообщения с одним ключом попадают в одну партицию (гарантия порядка). Больше партиций = больше параллелизма.
Подробнее →Consumer group - логическая группа потребителей. Kafka гарантирует, что каждая партиция назначена только одному consumer'у в группе. Это обеспечивает параллельную обработку без дублирования. Разные группы читают одни и те же сообщения независимо.
Подробнее →Offset - уникальный порядковый номер каждого сообщения внутри партиции. Consumer хранит свой offset - позицию последнего прочитанного сообщения. При сбое consumer возобновляет чтение с сохранённого offset.
Подробнее →Kafka пишет данные последовательно (append-only) - на порядки быстрее случайной записи. Также: zero-copy (sendfile) для чтения, батчинг сообщений, сжатие на уровне батча. Последовательное чтение диска может быть быстрее RAM при случайном доступе.
Подробнее →Каждая партиция реплицируется на несколько брокеров (replication factor). Один брокер - лидер, остальные - реплики (ISR). При падении лидера реплика из ISR автоматически становится новым лидером.
Подробнее →At-most-once - коммит offset до обработки (может потеряться). At-least-once - коммит после обработки (может повториться). Exactly-once - транзакции Kafka + идемпотентный producer. На практике чаще используют at-least-once с идемпотентной обработкой.
Подробнее →