Использовались ли очереди или брокеры сообщений в микросервисах
Что проверяют
Есть ли у вас реальный опыт асинхронного взаимодействия и понимаете ли вы гарантии доставки, а не только названия RabbitMQ и Kafka. Следом обычно спрашивают, что будет, если консьюмер упал посреди обработки, и как вы избежали двойной обработки.
Как отвечать
Стройте ответ от своего проекта: задача, почему брокер, а не HTTP-вызов, что ломалось. Опорные темы для Python:
- инструменты: Celery поверх RabbitMQ или Redis для фоновых задач,
aio-pikaили FastStream для событий между сервисами,confluent-kafkaилиaiokafkaдля Kafka; - RabbitMQ против Kafka: очередь, из которой сообщение уходит после подтверждения, против журнала с хранением и возможностью перечитать события. Порядок в Kafka гарантирован только внутри партиции, а параллелизм группы ограничен числом партиций;
- гарантии: на практике это at-least-once, поэтому консьюмер обязан быть идемпотентным (ключ идемпотентности, уникальный индекс);
- подтверждения: ack после обработки, а не при получении. В Celery это
task_acks_late=Trueплюс разумныйworker_prefetch_multiplier, чтобы один воркер не забирал себе пачку задач; - ошибки: ретраи с backoff, dead letter exchange в RabbitMQ или отдельный топик в Kafka для сообщений, которые не обрабатываются;
- согласованность: запись в базу и публикация события не атомарны, для этого есть transactional outbox;
- мониторинг: глубина очереди, consumer lag в Kafka, Flower для Celery.
Нужны ваши цифры: поток сообщений, лаг, инциденты. Если в микросервисах брокеров не было, скажите честно и расскажите, где встречались очереди: фоновые задачи на Celery в монолите тоже релевантный опыт.
Где спотыкаются
Говорят, что брокер «гарантирует доставку». Без durable очередей, persistent сообщений, publisher confirms и ack после обработки сообщения теряются, а с ними появляются дубли, которые нужно переварить.
Путают pub/sub и распределение нагрузки. Нагрузку делят конкурирующие консьюмеры одной очереди или одной consumer group, а pub/sub рассылает копию каждому подписчику.
Называют Kafka «быстрой очередью» и не могут объяснить партиции и офсеты, а заодно почему консьюмеров больше, чем партиций, ставить бесполезно.