Как Kafka записывает сообщения и как их передает?
Ответ от нейросети
sobes.tech AI
Сообщения записываются последовательно в файлы сегментов (segments) в логе. При записи каждого сообщения Kafka добавляет его в конец текущего активного сегмента. Каждый сегмент имеет фиксированный или настраиваемый размер, при достижении которого Kafka создает новый сегмент. Офсет (offset) сообщения является уникальным идентификатором в рамках раздела (partition) и представляет его позицию в этом логе.
Передача сообщений основана на механизме pull: потребители (consumers) самостоятельно запрашивают данные у брокеров (brokers). Каждый потребитель группы хранит свой офсет для каждого раздела, отслеживая, до какого сообщения он прочитал данные. Kafka не хранит состояние каждого потребителя индивидуально, что позволяет масштабировать количество потребителей независимо от количества разделов или брокеров. Брокеры передают сообщения из запрошенного офсета до последнего доступного.
Kafka использует нулевое копирование (zero-copy principle) для эффективной передачи данных из файловой системы в сетевой сокет, минуя буферы пользовательского пространства, что значительно уменьшает накладные расходы на копирование данных.
// Пример запроса потребителя
// consumer.poll(Duration.ofMilliseconds(100))
// Потребитель запрашивает новые сообщения, начиная с его текущего офсета