📡 Kafka¶
Kafka — распределённый лог сообщений (брокер): сервисы пишут события в топики, другие читают их независимо. Хранит и доставляет записи, а не «преобразует» их по пути.
Status: Draft
1. Сущности
| Сущность | Роль |
|---|---|
| Broker | Узел кластера: принимает, хранит, отдаёт сообщения |
| Topic | Именованный поток событий (логический канал) |
| Partition | Часть topic: упорядоченный лог на диске |
| Record (message) | Запись: key, value, timestamp (+ headers) |
| Producer | Пишет в topic |
| Consumer | Читает из topic |
2. Поток данных
Producer → topic (N partitions) → Consumer
- Сообщение попадает в конкретную partition (по key, round-robin или явно).
- Порядок FIFO гарантируется внутри partition, не по всему topic.
- Один key → одна partition → порядок для этого key сохраняется.
3. Consumer group и offset
Consumer group — набор consumer'ов с одним group.id: партиции топика делятся между ними (масштабирование чтения).
| Понятие | Смысл |
|---|---|
| Offset | Позиция в partition («докуда прочитали») |
| Commit | Сохранить offset (чтобы после рестарта продолжить) |
| Rebalance | Перераздача партиций при входе/выходе member'а |
Один partition в группе читает один consumer; больше consumer'ов, чем партиций — лишние простаивают.
4. Надёжность
| Механизм | Смысл |
|---|---|
| Replication | Partition копируется на несколько broker'ов |
| Leader / followers | Пишет и читает (обычно) leader; followers — реплики |
| ISR | In-Sync Replicas — реплики, не отстающие от leader |
| Retention | Сколько хранить по времени/размеру (независимо от «прочитали или нет») |
Ack'и producer'а (acks=all и т.п.) и min.insync.replicas задают, насколько «жёстко» ждать запись на реплики.
5. Кластер и метаданные
Метаданные кластера (топики, партиции, кто leader) хранятся отдельно от полезной нагрузки сообщений.
| Режим | Как |
|---|---|
| KRaft | Метаданные внутри Kafka (текущий стандарт новых кластеров) |
| ZooKeeper | Внешний ансамбль — legacy; новые инсталляции без него |
На собесе: «раньше ZK, сейчас KRaft» — достаточно; детали кворума — уже ops-глубина.
6. CLI
Имена скриптов зависят от дистрибутива (kafka-topics.sh / kafka-topics); идея одна.
# топики
kafka-topics --bootstrap-server localhost:9092 --list
kafka-topics --bootstrap-server localhost:9092 \
--create --topic orders --partitions 3 --replication-factor 2
# запись / чтение
kafka-console-producer --bootstrap-server localhost:9092 --topic orders
kafka-console-consumer --bootstrap-server localhost:9092 \
--topic orders --from-beginning
--bootstrap-server — любой доступный broker для старта клиента.
Вопросы
В разработке..