В распределённых хранилищах данных ключевую роль играют брокеры сообщений — специализированные компоненты, которые получают, хранят и пересылают сообщения между производителями (producers) и потребителями (consumers)
У каждого сообщения, передаваемого через брокер, как правило, есть идентификатор, время отправки и топик (topic).
Топик — это логическая категория или канал, через который сообщения публикуются и читаются. Он помогает организовать данные по смыслу. Например, можно создать отдельные топики для логов, заказов или уведомлений
Одной из популярных используемых систем является Kafka.
Для управления кластером брокеров Kafka раньше использовалась отдельная система — Zookeeper, которая обеспечивала согласованность, отслеживание состояния брокеров и выбор лидера. Zookeeper представляет собой суперсущность, которая управляет брокерами, что усложняет архитектуру
С недавних пор Kafka постепенно переходит на KRaft (Kafka Raft) — это встроенный механизм управления метаданными, основанный на алгоритме Raft. Он упрощает архитектуру, избавляя от необходимости в Zookeeper и делает настройку более удобной и надёжной
Когда консьюмер (то есть потребитель сообщений) подписывается на какую-то тему, важно понимать, что каждый топик может быть разбит на несколько партиций (partitions). Эти партиции хранятся на разных нодах (узлах) кластера. Таким образом, чтобы прочитать весь поток данных из топика, консьюмер должен обращаться к нескольким нодам — по одной на каждую партицию
Чтобы масштабировать потребление и избежать дублирования, можно создать группу консьюмеров (consumer group). Тогда Kafka гарантирует, что каждую партицию будет обрабатывать только один участник группы, а сообщения будут делиться между участниками. Это позволяет обрабатывать данные параллельно, повышая производительность и отказоустойчивость