Я новичок в распределенной потоковой обработке (Spark). Я читал несколько руководств/примеров, в которых показано, как обратное давление приводит к замедлению производительности в ответ на перегрузку потребителей. Приведенный классический пример — прием и анализ твитов. Когда возникает неожиданный всплеск трафика, когда потребители не могут справиться с нагрузкой, они применяют обратное давление, и производитель реагирует, снижая свою скорость.
Чего я действительно не вижу, так это того, какие подходы используются на практике для обработки огромного количества входящих данных в реальном времени, которые не могут быть немедленно обработаны из-за более низкой пропускной способности всего конвейера?
Я полагаю, что ответ на этот вопрос зависит от бизнес-домена. Для некоторых проблем может быть нормально просто удалить эти данные, но в этом вопросе я хотел бы сосредоточиться на случае, когда мы не хотим терять данные.
Поскольку я буду работать в среде AWS, моей первой мыслью будет «буферизировать» лишние данные в очереди SQS или потоке Kinesis. Так ли это просто на практике, или это более стандартное потоковое решение этой проблемы (возможно, как часть самого Spark)?