Встречается на собеседованиях • сегодня

Как сделать чтобы заявка не отправлялась повторно в Kafka если не обновился статус что event был отправлен

Для предотвращения повторной отправки сообщений в Kafka можно использовать идемпотентного продюсера или реализовать механизм дедупликации.

Идемпотентный продюсер (Kafka >= 0.11):

python
from kafka import KafkaProducer

producer = KafkaProducer(
    bootstrap_servers=['localhost:9092'],
    enable_idempotence=True,  # Включает идемпотентность
    acks='all',
    retries=3
)

Дедупликация на стороне продюсера:

  1. Сохранять event_id в БД перед отправкой
  2. Проверять статус перед повторной отправкой
python
import hashlib

def get_event_id(data):
    return hashlib.md5(str(data).encode()).hexdigest()

event_id = get_event_id(data)
if not is_event_sent(event_id):  # Проверка в БД
    producer.send('topic', value=data)
    mark_as_sent(event_id)  # Обновить статус

Важно:

  • Идемпотентность гарантирует "ровно одну" доставку только в пределах одной сессии продюсера
  • Для кросс-сессионной гарантии нужен внешний механизм (например, БД)
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы