Apache Kafka — the friendly introApache Kafka — дружелюбное введение

What Kafka actually is, in plain words and everyday analogies. When you're comfortable here, switch to Advanced. Что такое Kafka на самом деле — простыми словами и аналогиями из жизни. Когда станет комфортно, переключайся на Advanced.
🟢 BeginnerНовичок 🔴 AdvancedПродвинутый

1. What is Kafka?1. Что такое Kafka?

Kafka is a system for moving streams of messages between programs, reliably and at huge scale. One side writes messages (events), the other side reads them — and Kafka keeps every message safely in the middle for a while, in order.

Kafka — это система для передачи потоков сообщений между программами, надёжно и на огромном масштабе. Одна сторона пишет сообщения (события), другая читает — а Kafka надёжно хранит каждое сообщение посередине какое-то время и по порядку.

AnalogyАналогия Think of a conveyor belt with a logbook. Producers drop items on the belt; consumers pick them up further down. Unlike a normal belt, Kafka also writes down everything that passed, so you can rewind and re-read it later. Представь конвейерную ленту с журналом. Продюсеры кладут предметы на ленту; консьюмеры забирают их дальше. В отличие от обычной ленты, Kafka ещё и записывает всё, что проехало, поэтому можно «отмотать назад» и перечитать.
One lineОдной строкой Kafka is a durable, replayable log that decouples the programs that produce data from the ones that consume it. Kafka — это надёжный перечитываемый лог, который развязывает программы, производящие данные, и те, что их потребляют.

2. The big idea: an append-only log2. Главная идея: лог только на дозапись

Most databases let you change rows in place. Kafka is different: it's a log. New messages are only ever added to the end, never edited. Each reader remembers how far it has read and moves forward at its own pace.

Большинство баз позволяют менять строки на месте. Kafka устроена иначе: это лог. Новые сообщения только дописываются в конец, их не редактируют. Каждый читатель помнит, до какого места он дочитал, и двигается вперёд в своём темпе.

producers ──write──▶ [ msg0 ][ msg1 ][ msg2 ][ msg3 ] ... ──▶ (new ones added here) ▲ ▲ reader A is here reader B is here (each at its own spot)
AnalogyАналогия Like a group chat history: messages keep getting added at the bottom, nobody rewrites old ones, and each person has their own "last read" marker. You can always scroll back. Как история в групповом чате: сообщения добавляются снизу, старые никто не переписывает, и у каждого свой маркер «прочитано до». Всегда можно прокрутить назад.

3. Topics, partitions, offsets3. Топики, партиции, оффсеты

  • A topic is a named stream — like a channel. E.g. orders or clicks.
  • Each topic is split into partitions — separate parallel lanes of the same topic. More partitions = more readers can work at once.
  • An offset is just the position number of a message inside its partition (like a line number). Readers track their offset to know where they are.
  • Топик — именованный поток, как канал. Например orders или clicks.
  • Каждый топик делится на партиции — отдельные параллельные «дорожки» одного топика. Больше партиций = больше читателей работают одновременно.
  • Оффсет — просто номер позиции сообщения внутри его партиции (как номер строки). Читатели хранят свой оффсет, чтобы знать, где они.
AnalogyАналогия A topic is a book; partitions are its volumes so several people can read different volumes at the same time; the offset is the page number you're on. Топик — это книга; партиции — её тома, чтобы несколько человек читали разные тома одновременно; оффсет — это номер страницы, на которой ты.
The one ordering ruleЕдинственное правило порядка Order is guaranteed only within a single partition, not across the whole topic. So if order matters for, say, one user, send all that user's messages to the same partition (by using the user id as the key). Порядок гарантирован только внутри одной партиции, а не по всему топику. Поэтому если порядок важен, например, для одного пользователя, отправляй все его сообщения в одну партицию (используя id пользователя как ключ).

4. Producers, consumers & consumer groups4. Продюсеры, консьюмеры и группы консьюмеров

  • A producer writes messages into a topic.
  • A consumer reads them.
  • A consumer group is a team of consumers sharing the work: Kafka gives each partition to one member of the team, so they read in parallel without stepping on each other.
  • Продюсер пишет сообщения в топик.
  • Консьюмер их читает.
  • Группа консьюмеров — команда консьюмеров, делящая работу: Kafka отдаёт каждую партицию одному члену команды, чтобы они читали параллельно, не мешая друг другу.
AnalogyАналогия A big pile of mail (the topic) is split into bins (partitions). A team of sorters (a consumer group) takes one bin each — twice the sorters, twice the speed, up to the number of bins. You can't have more active sorters than bins. Большая куча писем (топик) разложена по корзинам (партициям). Команда сортировщиков (группа консьюмеров) берёт по корзине — вдвое больше сортировщиков, вдвое быстрее, но не больше числа корзин. Активных сортировщиков не может быть больше, чем корзин.
Why this is powerfulПочему это мощно Many different groups can read the same topic independently, each at its own speed — e.g. one group fills a database, another powers alerts, a third trains a model. They don't interfere because each tracks its own offsets. Много разных групп могут читать один топик независимо, каждая в своём темпе — например, одна наполняет базу, другая шлёт алерты, третья обучает модель. Они не мешают, потому что у каждой свои оффсеты.

5. "It might arrive twice" — duplicates5. «Может прийти дважды» — дубли

Networks are unreliable, so to avoid losing a message Kafka prefers to retry until it's sure the message was received. A side effect: sometimes a message is delivered more than once. There are three levels:

Сети ненадёжны, поэтому чтобы не потерять сообщение, Kafka предпочитает повторять, пока не убедится, что оно получено. Побочный эффект: иногда сообщение доставляется больше одного раза. Есть три уровня:

LevelMeaningRisk
At-most-onceSend and forget, no retryCan lose messages
At-least-once (common)Retry until confirmedCan get duplicates
Exactly-onceNo loss and no duplicatesMore cost & complexity
УровеньСмыслРиск
At-most-onceОтправил и забыл, без повторовМожно потерять сообщения
At-least-once (частый)Повтор до подтвержденияМожно получить дубли
Exactly-onceБез потерь и без дублейДороже и сложнее
The trick: make duplicates harmlessПриём: сделать дубли безвредными The usual approach is "at-least-once + make processing safe to repeat" (called idempotency). Give each message a unique id; if you see the same id again, ignore it. Then a duplicate delivery doesn't cause double-counting. Обычный подход — «at-least-once + сделать обработку безопасной к повтору» (это называется идемпотентность). Дай каждому сообщению уникальный id; если видишь тот же id снова — игнорируй. Тогда повторная доставка не приведёт к двойному счёту.

6. How Kafka avoids losing data6. Как Kafka не теряет данные

Kafka runs on several servers called brokers. Each partition is copied onto a few brokers (this is replication). One copy is the "leader" that handles reads/writes; the others stay in sync as backups. If a broker dies, a backup copy takes over — no data lost.

Kafka работает на нескольких серверах — брокерах. Каждая партиция копируется на несколько брокеров (это репликация). Одна копия — «лидер», она обслуживает чтение/запись; остальные держатся в синхроне как резерв. Если брокер умирает, резервная копия берёт управление — данные не теряются.

A producer can also choose how careful to be with acks: wait for all copies to confirm (safest) or just the leader (faster, riskier).

Продюсер также выбирает, насколько осторожным быть, через acks: ждать подтверждения всех копий (надёжнее) или только лидера (быстрее, рискованнее).

Also: it remembers, then forgetsЕщё: помнит, потом забывает Kafka keeps messages for a set retention time (e.g. 7 days), so consumers can re-read or catch up. After that, old messages are deleted to free space. Kafka is a buffer, not infinite storage. Kafka хранит сообщения заданное время retention (например 7 дней), чтобы консьюмеры могли перечитать или догнать. После этого старые сообщения удаляются ради места. Kafka — это буфер, а не бесконечное хранилище.

7. Why teams use Kafka7. Зачем команды используют Kafka

  • Decoupling: producers don't need to know who reads the data. Add new consumers anytime without touching producers.
  • Absorbing spikes: if a sudden flood of events arrives, Kafka holds them and consumers drain at their own pace — instead of crashing.
  • Replay: because it's a stored log, you can reprocess history (e.g. after fixing a bug) by re-reading from an earlier offset.
  • Scale: partitions let many machines share the load — millions of messages per second.
  • Развязка: продюсерам не нужно знать, кто читает данные. Новых консьюмеров можно добавлять в любой момент, не трогая продюсеров.
  • Гашение всплесков: если внезапно нахлынул поток событий, Kafka держит их, а консьюмеры разбирают в своём темпе — вместо падения.
  • Перечитка: раз это хранимый лог, можно переобработать историю (например, после фикса бага), перечитав с более раннего оффсета.
  • Масштаб: партиции позволяют многим машинам делить нагрузку — миллионы сообщений в секунду.
Kafka vs Flink (the next page)Kafka vs Flink (следующая страница) Kafka moves and stores the stream. It doesn't do heavy computation on it. To compute over a stream (running totals, windows, joins) you use a stream processor like Flink, which usually reads from and writes back to Kafka. Kafka перемещает и хранит поток. Она не делает тяжёлых вычислений над ним. Чтобы вычислять по потоку (бегущие суммы, окна, джоины), берут процессор потоков вроде Flink, который обычно читает из Kafka и пишет обратно в неё.

8. Mini-glossary8. Мини-словарь

WordPlain meaning
BrokerOne Kafka server.
TopicA named stream / channel of messages.
PartitionA parallel lane of a topic; ordering holds only inside one.
OffsetA message's position number in a partition.
Producer / ConsumerWriter / reader of messages.
Consumer groupA team of consumers splitting the partitions.
ReplicationCopies of a partition on other brokers, for safety.
RetentionHow long messages are kept before deletion.
IdempotencyProcessing the same message twice is safe.
СловоПростой смысл
БрокерОдин сервер Kafka.
ТопикИменованный поток / канал сообщений.
ПартицияПараллельная дорожка топика; порядок держится только внутри одной.
ОффсетНомер позиции сообщения в партиции.
Продюсер / КонсьюмерПисатель / читатель сообщений.
Группа консьюмеровКоманда консьюмеров, делящая партиции.
РепликацияКопии партиции на других брокерах ради сохранности.
RetentionСколько хранятся сообщения до удаления.
ИдемпотентностьОбработать одно сообщение дважды — безопасно.

9. Quick self-check9. Быстрая самопроверка

Answer in your head, then tap to flip.Ответь про себя, потом нажми, чтобы перевернуть.

In one sentence, what is Kafka?Одним предложением — что такое Kafka?
tapнажми
A durable, replayable log that moves streams of messages between programs and decouples producers from consumers.Надёжный перечитываемый лог, который передаёт потоки сообщений между программами и развязывает продюсеров и консьюмеров.
Where is message order guaranteed?Где гарантирован порядок сообщений?
tapнажми
Only within one partition. To keep one entity's events ordered, send them to the same partition by using a key (e.g. user id).Только внутри одной партиции. Чтобы события одной сущности были по порядку, шли их в одну партицию через ключ (например id пользователя).
Why add more partitions?Зачем добавлять партиции?
tapнажми
More parallelism: each partition can be read by one consumer in a group, so more partitions let more consumers work at once.Больше параллелизма: каждую партицию читает один консьюмер в группе, поэтому больше партиций — больше консьюмеров работают одновременно.
A message arrived twice. How do you cope?Сообщение пришло дважды. Как справиться?
tapнажми
Make processing idempotent: give messages a unique id and ignore ids you've already handled. Then duplicates don't double-count.Сделай обработку идемпотентной: уникальный id у сообщений, уже обработанные id игнорируй. Тогда дубли не дадут двойного счёта.
How does Kafka survive a broker dying?Как Kafka переживает смерть брокера?
tapнажми
Each partition is replicated onto several brokers. If the leader copy's broker dies, an in-sync backup copy takes over. No data lost (with safe acks).Каждая партиция реплицирована на несколько брокеров. Если брокер с лидер-копией умирает, синхронная резервная копия берёт управление. Данные не теряются (при безопасных acks).
Kafka vs Flink?Kafka vs Flink?
tapнажми
Kafka moves and stores streams; Flink computes over them (totals, windows, joins). Flink usually reads from and writes back to Kafka.Kafka перемещает и хранит потоки; Flink вычисляет по ним (суммы, окна, джоины). Flink обычно читает из Kafka и пишет обратно.