Push отправляет данные потребителю по инициативе брокера, pull позволяет потребителю запрашивать порции. Управление потоком нужно в обоих случаях; сама модель не определяет весь расход памяти брокера.
В чём разница между архитектурными подходами Push-based и Pull-based при проектировании систем стриминга данных, например RabbitMQ и Kafka? Как эти подходы влияют на утилизацию памяти на стороне брокера и проблему перегрузки потребителей (consumer backpressure)?
Push отправляет данные потребителю по инициативе брокера, pull позволяет потребителю запрашивать порции. Управление потоком нужно в обоих случаях; сама модель не определяет весь расход памяти брокера.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Push отправляет данные потребителю по инициативе брокера, pull позволяет потребителю запрашивать порции. Управление потоком нужно в обоих случаях; сама модель не определяет весь расход памяти брокера.
При push ограничивают число неподтверждённых сообщений и скорость отправки, иначе память клиента растёт. При pull контролируют размер выборки, внутреннюю очередь и число обрабатываемых записей. RabbitMQ-потребление часто push-based с prefetch, Kafka — fetch-based, но нельзя сводить продукты только к этому различию. Отстающий потребитель увеличивает очередь или лаг; хранение на диске, retention и лимиты определяют, где накапливается нагрузка.