Sobes.tech
Senior
54

Wie haben Sie die parallele Verarbeitung von Anfragen mit Kafka umgesetzt? Worin bestand die Umsetzung?

Unternehmen wurden gefragt
01.tech

Antwort von AI

sobes.tech KI

Для параллельной обработки запросов с помощью Kafka обычно используют несколько потребителей (consumers), объединённых в consumer group. Каждый consumer в группе получает свою часть партиций топика, что позволяет обрабатывать сообщения параллельно и масштабируемо.

Реализация включает следующие шаги:

  • Создание топика с несколькими партициями для обеспечения параллелизма.
  • Запуск нескольких экземпляров consumer в одной группе, чтобы Kafka распределила партиции между ними.
  • Каждый consumer обрабатывает сообщения из своих партиций независимо.
  • Использование асинхронной обработки и commit offset для гарантии обработки.

Пример на Java с использованием KafkaConsumer:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "my-group");
props.put("enable.auto.commit", "false");
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));
    records.forEach(record -> {
        // Обработка сообщения
        System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
    });
    consumer.commitSync();
}

Таким образом, масштабирование достигается за счёт увеличения числа партиций и количества потребителей в группе.