Почему Kafka такая быстрая?

«Почему Kafka такая быстрая?» — вопрос из категории Брокеры сообщений, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Высокая производительность Apache Kafka достигается за счёт архитектурных решений, оптимизирующих работу с диском и сетью.

Основные принципы:

  1. Последовательная запись на диск (Append-Only Log): Данные записываются только в конец файла. Это самая быстрая операция для HDD/SSD, так как минимизирует перемещение головки диска.
  2. Zero-Copy: Для передачи данных потребителям Kafka использует системный вызов sendfile(), который передаёт данные напрямую из кэша страниц (page cache) ядра ОС в сетевой сокет, минуя копирование в пользовательское пространство.
  3. Батчинг (Batching): Сообщения накапливаются и отправляются пачками как между продюсером и брокером, так и при записи на диск. Это резко снижает накладные расходы на сетевые вызовы и операции ввода-вывода.
    // Конфигурация продюсера
    properties.put("batch.size", 65536); // Размер батча в байтах
    properties.put("linger.ms", 10);     // Время ожидания для формирования батча
  4. Использование Page Cache: Kafka полагается на файловый кэш ОС. Часто читаемые данные находятся в RAM, что делает чтение почти таким же быстрым, как из памяти.
  5. Партиционирование и параллелизм: Топик делится на партиции, которые могут обрабатываться и размещаться на разных дисках и узлах параллельно.
  6. Протокол поверх TCP: Простой бинарный протокол поверх TCP с минимальными накладными расходами, в отличие от протоколов уровня приложения, таких как AMQP или HTTP.