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