Что такое Kafka
Apache Kafka — распределённая платформа потоковой передачи событий: прочный дописываемый журнал, в который одновременно пишут и из которого читают множество программ. Её построили в LinkedIn около 2010 года для потоков кликов, а в 2011 году она стала проектом Apache. Простая аналогия — почта, которая ничего не выбрасывает: отправители кладут сообщения в именные ящики, а читатели забирают их, когда удобно, — через минуты или через месяцы.
Основные понятия за минуту
Событие — один неизменяемый факт: ключ, значение и метка времени.
Топик — именованный поток событий, разбитый на партиции:
упорядоченные журналы на разных машинах, за счёт чего и достигается
пропускная способность. Порядок гарантируется только внутри одной
партиции, но никогда — по топику в целом.
Брокеры — серверы, образующие кластер; современные кластеры
координируются встроенным протоколом KRaft (ZooKeeper удалён в Kafka 4.0,
новым установкам он не нужен). Продюсеры дописывают события,
консюмеры читают их в своём темпе и фиксируют офсеты —
закладки прочитанного. Консюмеры с общим id группы делят партиции
топика между собой, поэтому добавление воркеров линейно ускоряет чтение.
Где подходит, а где — нет
Kafka подходит высоконагруженным потокам событий между несвязанными
сервисами: сбор логов и метрик, событийные микросервисы, обработка
потоков в реальном времени. Главная возможность — повторное чтение:
новый консюмер может перечитать историю с начала, не прося продюсеров
отправить что-то заново.
Не подходит для вызовов запрос/ответ (там HTTP или RPC), крошечных
нагрузок, которые потянет любая очередь, и данных со строгим глобальным
порядком от многих писателей. Один брокер ради трёх сообщений в день —
операционный театр; установки ниже рассчитаны на настоящий трафик.
Сценарии и установки
Конкретные установки, от простой к полной, — на странице сценариев:
- Централизованный сбор логов — каждый сервис складывает логи в Kafka вместо локальных файлов.
- Событийные микросервисы — сервис заказов рассылает события, а склад и рассылка реагируют независимо.
- Потоковая обработка в реальном времени — подсчёт и окна поверх живого потока событий.
- Многоконтейнерная установка в Docker Compose — продюсер, консюмер и Kafka как контейнеры, общающиеся через топики.