Apache Kafka
Kafka — распределённый лог-брокер. LinkedIn (2011), потом Apache. Не очередь, а append-only лог: сообщения хранятся, читаются много раз, любой consumer держит свой offset.
Термины
- Broker — узел кластера
- Topic — именованный поток сообщений
- Partition — физическая часть топика (упорядочена внутри)
- Producer — пишет
- Consumer — читает, держит offset
- Consumer group — набор consumer'ов, каждая partition уходит одному в группе
Модель
Topic "orders" (partitions=3, replication=3)
partition 0: [m0][m1][m2][m3]...
partition 1: [m0][m1][m2]...
partition 2: [m0][m1][m2][m3][m4]...
Each partition = ordered log, per-partition offset.
Global order — не гарантирован. Per-key order — да, если partition by key.
Wire protocol
Собственный бинарный TCP. Порт 9092. Client discover'ит brokers через bootstrap.servers. Основные RPC: Produce, Fetch, Metadata, JoinGroup, OffsetCommit.
Гарантии доставки
| Acks | Значит |
|---|---|
acks=0 | fire-and-forget |
acks=1 | только leader ответил |
acks=all | все ISR (in-sync replicas) записали |
С enable.idempotence=true + acks=all — exactly-once на уровне producer→broker.
Consumer groups
Topic orders, 6 partitions, group "billing" с 3 consumers:
consumer-A: partitions 0, 1
consumer-B: partitions 2, 3
consumer-C: partitions 4, 5
# consumer падает → rebalance
consumer-A: 0, 1, 2
consumer-B: 3, 4, 5
Retention
Сообщения не удаляются после чтения. Хранятся:
- По времени:
retention.ms=604800000(7 дней) - По размеру:
retention.bytes - Log compaction: держать последнее значение для каждого key (для реплик и снимков состояния)
KRaft (без ZooKeeper)
До Kafka 3.3 нужен был ZooKeeper для metadata. Теперь встроенный KRaft (Kafka Raft). Один бинарник, меньше операционного оверхеда. С Kafka 4.0 (2025) ZooKeeper удалён окончательно.
Streams / Connect / Schema Registry
- Kafka Streams — Java-lib для stream processing поверх Kafka
- ksqlDB — SQL поверх Streams
- Kafka Connect — коннекторы к БД, S3, ES
- Schema Registry (Confluent) — Avro/Protobuf/JSON схемы
Замены и совместимые
- Redpanda — C++ реализация, wire-compatible
- WarpStream — S3-backed, компатабельный
- Confluent Platform — enterprise Kafka
- AWS MSK, Aiven, Yandex Managed Kafka