Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Журнал
Тема Kafka - это набор партиций. Каждая партиция - упорядоченный журнал записей, пронумерованных смещениями, и каждая группа консьюмеров читает тему целиком.
Схема текстом
- Тема orders: P0; 0; 1; 2; 3; 4; 5; P1; 0; 1; 2; 3; P2; 0; 1; 2; 3; 4
- Группа billing: Участник 1: P0, P1; Участник 2: P2
- Группа audit: Участник 1: P0, P1, P2
- Продюсер ключ выбирает партицию → Тема orders: дописывает
- Тема orders → Группа billing: читает каждую запись
- Тема orders → Группа audit: читает каждую запись
- Каждая группа фиксирует своё смещение на партицию: запись, с которой она продолжит
Продюсер дописывает запись в одну партицию темы. Запись с ключом попадает в партицию, на которую указывает хеш ключа, поэтому записи одного ключа сохраняют порядок. Запись без ключа попадает туда, куда её направит партиционер продюсера.
Каждая партиция нумерует свои записи с нуля, и её смещения растут независимо от смещений других партиций. Порядок соблюдается внутри партиции и больше нигде. Запись остаётся в журнале, пока её не удалит политика хранения, независимо от того, прочитал её кто-нибудь или нет.
Группа консьюмеров читает каждую запись темы один раз. Группа отдаёт каждую партицию одному из своих участников, и участники делят работу между собой. Вторая группа читает собственную копию каждой записи, и две группы никак не влияют друг на друга.
То, что группа прочитала, - это одно число на партицию: её зафиксированное смещение, запись, с которой группа продолжит. Подтверждений по отдельным записям Kafka не хранит.
Эта модель взята у самой Apache Kafka (понятия и термины). Как группа делит свои партиции, показывает страница Группы, а как клиент читает и фиксирует смещения, - страница Консьюмер.