Files
resume/stack/kafka/QUESTIONS.md

28 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Вопросы: Kafka
Опираются на кейс: [CASE.md](CASE.md). Источники — [Bi.Zone.md](../../interview/Bi.Zone.md), [Alfa-Bank.md](../../interview/Alfa-Bank.md) (упомянута в требованиях вакансии).
### Что такое Kafka?
Распределённая платформа для потоковой передачи событий (event streaming) — по сути, отказоустойчивый распределённый лог сообщений. Продюсеры пишут сообщения в топики, консюмеры читают их независимо друг от друга и в своём темпе; в отличие от классической очереди сообщения не удаляются сразу после прочтения, а хранятся заданное время (retention), поэтому несколько разных консюмеров могут читать один и тот же поток данных с разной скоростью или начинать читать заново.
### С какими версиями Kafka работал?
В домашней лабе поднимал актуальную версию (3.7) в режиме KRaft — то есть без ZooKeeper, это более новая архитектура, где консенсус по метаданным кластера реализован внутри самой Kafka через `controller`-роль вместо отдельного ZooKeeper-кластера. Более старые продовые инсталляции (до Kafka 3.x/4.x) чаще всего используют классическую схему с ZooKeeper — если на конкретном месте работы Kafka завязана на ZooKeeper, стоит явно уточнить это у интервьюера, чтобы не путать архитектуры.
### Что такое партиции и оффсеты?
Топик физически делится на партиции — это единица параллелизма и хранения. Каждое сообщение внутри партиции получает последовательный номер — оффсет, и порядок сообщений гарантирован только внутри одной партиции (не между партициями топика). Консюмер отслеживает, до какого оффсета он уже прочитал каждую партицию — это позволяет ему продолжить с того же места после перезапуска. У себя в лабе создавал топик с 3 партициями и через `kafka-consumer-groups.sh --describe` явно видел `CURRENT-OFFSET`/`LOG-END-OFFSET`/`LAG` по каждой партиции.
### Что такое consumer group и как балансируются партиции внутри неё?
Consumer group — логическое объединение нескольких консюмеров, которые вместе обрабатывают топик так, что каждое сообщение читается только одним консюмером из группы (а не всеми) — это механизм горизонтального масштабирования обработки. Партиции топика распределяются между консюмерами группы; если консюмеров больше, чем партиций, часть консюмеров останется без партиций и будет простаивать. У себя в лабе с топиком на 3 партиции и двумя консюмерами в одной группе увидел, как каждый консюмер забрал себе часть партиций.
### Что такое AT/ET CI/CD в контексте Kafka? (формулировка с собеседования Bi.Zone)
В контексте связки Kafka с CI/CD-пайплайнами это, по всей видимости, отсылка к семантике доставки сообщений — **at-least-once** (сообщение гарантированно доставлено, но может задублироваться при retry) и **exactly-once** (доставка ровно один раз, более строгая и дорогая гарантия, у Kafka реализуется через идемпотентного продюсера и транзакции). В пайплайнах обработки данных выбор между этими семантиками определяет, нужна ли дедупликация на стороне консюмера. Честно: на самом собеседовании формулировка вопроса была нестандартной, и это моя интерпретация вероятного смысла — по этой конкретной формулировке лучше переспросить интервьюера, что именно имеется в виду, а не гадать молча.
### Как замерить пропускную способность Kafka?
Встроенная утилита `kafka-producer-perf-test.sh` — задаёшь число записей, размер записи и лимит throughput (`-1` — без ограничения, максимальная скорость) и получаешь `records/sec`/`MB/sec` на конкретном железе. Я гонял такой замер у себя на однонодовом брокере — конкретные цифры и то, как они соотносятся с публично известными продовыми показателями, зафиксированы в [../../legend/CAPACITY.md](../../legend/CAPACITY.md).