Роль и функции консьюмера в архитектуре 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