Что такое Apache Kafka?
Распределённая платформа потоковой передачи данных для обработки больших потоков в реальном времени.
Какие основные компоненты Kafka?
Broker, Topic, Partition, Producer, Consumer, (Zookeeper / KRaft).
Что такое Topic и Partition?
Topic — поток сообщений по категории.
Partition — подмножество сообщений для параллелизма и масштабируемости.
Как работает продюсер в Kafka?
Отправляет сообщения в топики, может назначать partition по ключу.
Как работает консьюмер в Kafka?
Читает сообщения из топиков; группы консьюмеров распределяют нагрузку между собой.
Какие есть модели доставки сообщений?
At-most-once — может потеряться, дубликатов нет
At-least-once — все сообщения доставляются, возможны дубликаты
Exactly-once — каждое сообщение доставляется ровно один раз
Как Kafka обеспечивает отказоустойчивость?
Репликация partition-ов: leader обрабатывает записи, followers синхронизируют данные; при сбое failover на follower.
Что такое offset в Kafka?
Позиция консьюмера в partition; хранится в Kafka или внешнем хранилище для отслеживания прочитанных сообщений.
Что такое Kafka Connect?
Фреймворк для интеграции Kafka с внешними системами (базы данных, Data Lakes, очереди) с помощью готовых коннекторов.
Как реализуется exactly-once доставка?
1) Идемпотентность продюсеров
2) Транзакции
Идемпотентность продюсеров — это свойство систем, где сообщение, отправленное продюсером (producer), может быть безопасно отправлено повторно, и при этом в очередь попадёт только один экземпляр сообщения, или система гарантирует, что повторная отправка не приведёт к дублированию или порче данных.
Если идемотентости нет, то можно создать таблицы с id сообщениями и проверять было ли уже такое сообщение или нет.
Что хранит Kafka-сообщение?
Ключ, значение, offset, timestamp, headers.
Как повысить пропускную способность продюсера?
1) Увеличить размер батча (batch.size)
2) Повысить время ожидания для формирование батча (linger.ms)
3) Использовать сжатие данных compression.type=zstd.
Какие есть типы acks у продюсера?
acks - это настройка, которая показывает, сколько реплик должны подтвердить запись данных, чтобы продюсер счел запись успешной.
0 — не ждёт ответа; 1 — ждёт лидера; all — ждёт всех в ISR.
ISR (In-Sync Replicas) — это группа реплик Kafka, которые синхронизированы с лидером и содержат актуальные данные.
Как повысить производительность брокера?
1) Использовать ssd
2) Использовать больше RAM
3) Правильно настроить количество пар тиций
4) Тюнить параметры продюсера
5) Тюнить параметры сети и буфера
Что такое ретенция логов?
Период/размер, после которого Kafka удаляет старые сообщения.
Как повысить отказоустойчивость?
1) Увеличение фактора репликации (replication.factor=3)
2) Настройка подтвреждения от всех реплик (acks=all)
Какие ключевые метрики важны?
1) Lag (задержка)
2) ISR size (список реплик, которые полностью синхронизированы с лидером)
3) Пропускная способность (byte-in, byte-out)
Что такое ISR?
In-Sync Replicas — реплики, синхронизированные с лидером.
Какие есть стратегии партиционирования?
По ключу, случайное, кастомный партиционер.
Какой оптимальный размер segment.bytes для больших топиков?
Обычно 1 GB.
Какие алгоритмы компрессии рекомендуются?
lz4 (быстро), zstd (лучшее сжатие).
Что влияет на задержku (latency)?
1) linger.ms (время, которое дается для формирования батча)
2) acks (подтверждения на уровне кворуму, сколько брокеров должны подтвердить запись)
3) размер batch
4) скорость дисков
Как оптимизировать потребителя?
1) fetch.min.bytes (минимальный размер данных прежде, чем кафка ответит)
2) fetch.max.wait.ms (сколько кафка максимум может ждать)
3) следить за lag (количество сообщений, которые кафка не успел обработать)
.option(“startingOffsets”, “earliest”) # и “latest”
В чем разница?
Если укажем “earlest”, то браться новые сообщения, а также и те, которые уже были в kafka.
“latest” - будут браться только сообщения, которые пришли после запуска стриминга