Sobes.tech
Junior — Middle
153

Kafkaда билдирүүлөрдүн иштетилишинин уникалдуулугун кантип камсыз кылса болот, бир эле билдирүүнү кайра иштетүүнү болтурбоо үчүн?

Кайсыл жерде компаниялар сурады
СБЕРСБЕР

AIден жооп

sobes.tech AI

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

Чтобы избежать повторной обработки одного и того же сообщения, потребитель должен:

  • Сохранять (commit) offset после успешной обработки сообщения.
  • При перезапуске или сбое потребитель начинает чтение с последнего зафиксированного offset.

Таким образом, если offset зафиксирован, то сообщения с меньшими offset не будут обработаны повторно.

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

Пример фиксации offset в Java Kafka Consumer:

consumer.subscribe(Collections.singletonList("topic"));
while (true) {
    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
    for (ConsumerRecord<String, String> record : records) {
        // обработка сообщения
    }
    consumer.commitSync(); // фиксируем offset после обработки
}