К списку
Асинхронные системы и очередиJuniorСкрининг с HR

Роль и функции консьюмера в архитектуре Kafka

Краткий ответ

Консьюмер в Kafka — это компонент, который читает сообщения из одного или нескольких топиков, обрабатывая входящие данные. Он может работать в составе группы консьюмеров для распределения нагрузки и повышения устойчивости системы.

Развёрнуто

Краткий ответ

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


Как это работает

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

  • Если консьюмер работает один, он читает все сообщения из всех партиций топика.
  • В группе консьюмеров Kafka гарантирует, что каждая партиция будет обработана ровно одним консьюмером в группе, что повышает эффективность и масштабируемость.

KafkaConsumer — это класс, предоставляемый клиентской библиотекой Kafka для реализации консьюмера.

Ключевой аспект Описание
Подписка Консьюмер подписывается на топики для чтения
Группы консьюмеров Позволяют балансировать нагрузку и резервировать обработку
Партиции Единицы распределения данных в топике

Пример

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test-group");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList("my-topic"));

while (true) {
    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
    for (ConsumerRecord<String, String> record : records) {
        System.out.printf("offset = %d, key = %s, value = %s\n", record.offset(), record.key(), record.value());
    }
}

Пример показывает, как создать консьюмера, подписаться на топик и читать сообщения в цикле.

Что важно знать на собеседовании

  • Консьюмеры читают данные из топиков, которые разбиты на партиции.
  • Группы консьюмеров обеспечивают масштабируемость и отказоустойчивость.
  • Каждый партиция в группе консьюмеров обрабатывается только одним консьюмером.
  • Консьюмеры используют десериализацию для преобразования байтов в объекты.
  • Консьюмеры могут коммитить смещения (offsets) для отслеживания прогресса чтения.

Тема: Асинхронные системы и очереди | Уровень: junior