Kafka обеспечивает отказоустойчивость и высокую доступность за счёт репликации разделов (partitions) между брокерами кластера и механизма выбора лидера при сбоях. Данные пишутся на несколько реплик, а продюсер и потребители работают с лидером раздела, который автоматически переизбирается при падении узла. Дополнительно уровень надёжности регулируется настройками подтверждений (`acks`), размером ISR и параметром `min.insync.replicas`.
В Kafka тема (topic) разбивается на несколько разделов (partitions), и каждый раздел реплицируется на несколько брокеров согласно фактору репликации (`replication.factor`). У каждого раздела есть один лидер и несколько фолловеров: лидер принимает запись от продюсеров и раздаёт данные потребителям, а фолловеры асинхронно копируют его лог.
Механизм отказоустойчивости строится вокруг:
Высокая доступность достигается не только на уровне хранения, но и на уровне потребления. Потребители объединяются в группы (consumer groups) и балансируют чтение разделов: если один экземпляр потребителя падает, разделы автоматически перераспределяются между оставшимися, и обработка продолжается. Благодаря этому Kafka выдерживает сбои отдельных клиентов и брокеров без остановки всего сервиса.
Наконец, Kafka хранит сообщения на диске в commit log, используя последовательную запись и файловую систему для кеширования, что делает восстановление после сбоев быстрым и предсказуемым. В сочетании с распределённой архитектурой и продуманными настройками репликации это даёт как отказоустойчивость (не теряем данные при падениях узлов), так и высокую доступность (кластер остаётся рабочим, а сообщения по-прежнему можно писать и читать).
Отметьте свой прогресс