Найти тему
HowToSchool

SD-EP44: Почему брокер Apache Kafka такой быстрый?

Kafka обеспечивает доставку сообщений с малой задержкой благодаря последовательному вводу-выводу и принципу нулевого копирования. Те же методы обычно используются во многих других платформах обмена сообщениями/потоковой передачи.

Рассмотрим, как данные передаются между поставщиком (Producer) и потребителем (Consumer) и что означает нулевое копирование (zero copy).

Шаги 1.1–1.3: Поставщик записывает данные на диск.

Шаг 2: Потребитель читает данные без нулевого копирования:

2.1 Данные загружаются с диска в кэш операционной системы (ОС);

2.2 Данные копируются из кэша ОС в приложение Kafka;

2.3 Приложение Kafkaкопирует данные в буфер сокета;

2.4 Данные копируются из буфера сокета на сетевую карту;

2.5 Сетевая карта отправляет данные потребителю.

Шаг 3: Потребитель считывает данные с нулевым копированием:

3.1 Данные загружаются с диска в кэш ОС;

3.2 Кэш ОС напрямую копирует данные на сетевую карту с помощью команды sendfile();

3.3 Сетевая карта отправляет данные потребителю.

Оптимизация нулевой копии заключается в удалении нескольких этапов копирования данных, в результате чего данные передаются непосредственно из буфера чтения в буфер сокета, либо если сетевая карта поддерживает операции сбора, в буфер сокета записываются только дескрипторы с информацией о местоположении и длине данных. Данные передаются непосредственно из буфера чтения в сетевую карту.

Такой подход сокращает время копирования примерно на 65%.