Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое consumer в Kafka?
Consumer (потребитель) — это приложение или сервис, который читает сообщения из топиков Kafka. Consumer является одной из двух основных частей архитектуры Kafka, наряду с Producer.
Основная функция
Consumer подписывается на один или несколько топиков Kafka и получает сообщения по мере их появления. Это позволяет реализовать асинхронную обработку данных в распределённых системах.
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import java.time.Duration;
import java.util.Arrays;
import java.util.Properties;
public class SimpleConsumer {
public static void main(String[] args) {
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "my-group");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("auto.offset.reset", "earliest");
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("Partition: %d, Offset: %d, Key: %s, Value: %s%n",
record.partition(), record.offset(), record.key(), record.value());
}
}
}
}
Ключевые концепции
Consumer Group (группа потребителей)
- Несколько consumers могут объединяться в группу
- Каждый consumer в группе читает из разных partitions одного топика
- Если в группе 3 consumer, а в топике 6 partitions — каждый читает 2 partition
- При добавлении нового consumer происходит rebalancing
Offset (смещение)
- Каждое сообщение имеет уникальный номер offset в partition
- Consumer отслеживает, до какого offset он уже прочитал
- Это позволяет consumer восстановиться после сбоя и не потерять сообщения
Commit (фиксация)
// Автоматический commit (по умолчанию каждые 5 сек)
props.put("enable.auto.commit", "true");
props.put("auto.commit.interval.ms", "5000");
// Ручной commit для большей контроля
props.put("enable.auto.commit", "false");
// ...
for (ConsumerRecord<String, String> record : records) {
processRecord(record);
consumer.commitSync(); // Фиксируем успешную обработку
}
Стратегии получения сообщений
- Poll loop — основной способ, используется в большинстве случаев
- Seek — переместиться на конкретный offset
consumer.seek(new TopicPartition("my-topic", 0), 100);
Гарантии доставки
- At-least-once (по крайней мере один раз) — сообщение может быть обработано несколько раз
- At-most-once (не более одного раза) — некоторые сообщения могут быть потеряны
- Exactly-once (ровно один раз) — требует дополнительных механизмов (idempotency)
Consumer — это основной способ получения и обработки потоков данных в Kafka, обеспечивая асинхронную обработку и масштабируемость распределённых приложений.