Вопрос проверяет понимание архитектуры Kafka и принципов асинхронного обмена сообщениями между компонентами системы.
Kafka — это распределённая платформа для передачи и хранения сообщений. Producer отправляет сообщения в топики, а consumer читает их оттуда. Kafka хранит сообщения на диске и позволяет читать их независимо нескольким consumer’ам. Взаимодействие построено на pull-модели. Это делает систему масштабируемой и устойчивой.
Apache Kafka — это распределённый брокер сообщений, предназначенный для:
обработки потоков данных
асинхронного взаимодействия сервисов
высоконагруженных систем
Kafka сочетает в себе:
очередь сообщений
лог событий
систему стриминга
Перед разбором взаимодействия важно понимать ключевые компоненты.
Topic — логическое хранилище сообщений
Partition — физическое разбиение топика
Producer — отправляет сообщения
Consumer — читает сообщения
Consumer Group — группа consumer’ов для масштабирования
Producer:
формирует сообщение (key + value)
выбирает partition (по key или round-robin)
отправляет сообщение в Kafka
producer.send(new ProducerRecord<>("orders", key, value));
Особенности:
producer не ждёт, пока consumer прочитает сообщение
возможны разные уровни надёжности доставки
Consumer:
подписывается на один или несколько топиков
периодически опрашивает Kafka (pull-модель)
читает сообщения последовательно
consumer.subscribe(List.of("orders"));
consumer.poll(Duration.ofMillis(100));
Каждый consumer:
хранит offset
сам управляет тем, какие сообщения уже обработаны
Если несколько consumer’ов находятся в одной группе:
каждая partition читается только одним consumer’ом
нагрузка распределяется автоматически
порядок сообщений внутри partition сохраняется
Если группы разные:
каждую группу Kafka обслуживает независимо
сообщения читаются повторно
высокая пропускная способность
горизонтальное масштабирование
хранение сообщений на диске
слабая связанность producer и consumer
Kafka — это не просто очередь, а распределённый лог событий. Producer и consumer взаимодействуют через топики асинхронно, что делает систему устойчивой, масштабируемой и удобной для event-driven архитектур.