← Назад к вопросам

Что такое consumer в Kafka?

1.0 Junior🔥 251 комментариев
#Брокеры сообщений

Комментарии (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();  // Фиксируем успешную обработку
}

Стратегии получения сообщений

  1. Poll loop — основной способ, используется в большинстве случаев
  2. Seek — переместиться на конкретный offset
consumer.seek(new TopicPartition("my-topic", 0), 100);

Гарантии доставки

  • At-least-once (по крайней мере один раз) — сообщение может быть обработано несколько раз
  • At-most-once (не более одного раза) — некоторые сообщения могут быть потеряны
  • Exactly-once (ровно один раз) — требует дополнительных механизмов (idempotency)

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

Что такое consumer в Kafka? | PrepBro