Есть ли у вас опыт работы с брокерами сообщений, продюсерами и консьюмерами
Что проверяют
Работали ли вы с брокером в проде и понимаете ли гарантии доставки, а не только умеете вызвать publish. Следом обычно спрашивают, что будет, если консьюмер упал посреди обработки, и как вы избегаете дублей.
Как отвечать
Начните с конкретики: какой брокер, какая задача, какая нагрузка. Затем покажите, что понимаете разницу моделей:
- RabbitMQ: очередь. Продюсер пишет в exchange, тот по routing key раскладывает сообщения по очередям, после подтверждения (
ack) сообщение удаляется. Надёжность дают durable-очереди, persistent-сообщения, publisher confirms иprefetch_count, чтобы один консьюмер не забирал всё. Для отказоустойчивости берут quorum queues; - Kafka: распределённый лог. Сообщения хранятся в партициях заданный срок, консьюмеры группы делят партиции и сами двигают offset. Порядок гарантирован только внутри партиции, поэтому ключ выбирают осознанно, а параллелизм группы ограничен числом партиций;
- гарантии: на практике это at-least-once, значит обработчик должен быть идемпотентным: ключ идемпотентности, upsert, таблица обработанных сообщений. Необрабатываемые сообщения уводят в DLQ, а не крутят в бесконечном ретрае;
- Python-стек:
pikaилиaio-pikaдля RabbitMQ,confluent-kafkaилиaiokafkaдля Kafka, поверх них Celery или FastStream. Согласованность записи в базу и отправки события обеспечивают паттерном transactional outbox.
Опыт подавайте своими цифрами: сообщений в секунду, лаг консьюмеров, что мониторили, какой инцидент разбирали. Если работали только с Celery поверх Redis, так и скажите и объясните, какие гарантии доставки у этой связки.
Где спотыкаются
Говорят «использовали RabbitMQ и Kafka», не объясняя, зачем в проекте оба и чем они отличаются. Интервьюер сразу спросит про offset и ack.
Обещают exactly-once. В Kafka оно есть в рамках транзакций между топиками, но побочные эффекты вроде записи во внешнюю базу всё равно требуют идемпотентности.
Коммитят offset или делают ack до обработки. При падении сообщение теряется, и это всплывает на первом же уточняющем вопросе.