- Согласно приведенному выше коду, Spark сохраняет состояния только в последние 5 секунд?
Это зависит от того, какую семантику вы используете: если вы используете время обработки, да, это так. Если вы используете время события, окна в состоянии будут удалены, когда водяной знак пройдет по его конечной отметке времени, поэтому, если вы разрешите события с опозданием на 7 дней, окна в состоянии будут удалены через 7 дней.
- Удаляются ли старые состояния в каждой оконной операции?
Выселение (удаление окон в состоянии) будет происходить для каждой партии.
- Где хранятся состояния окон? Память
Для Apache Spark хэш-карта в executor содержит пары состояний ключ / значение. На самом деле Spark содержит несколько версий (пакетов) состояний, поэтому вам может потребоваться увеличить объем занятой памяти. В худшем случае теоретически он может занимать в 100 раз больше памяти, чем версия состояния. (Это будет исправлено в Spark 2.4.0.)
Databricks заявляет, что их продукт использует RocksDB, что позволяет избежать их хранения в куче памяти.
А с водяным знаком удаляются ли старые состояния в каждой операции группировки?
Выселение происходит при работе с состоянием независимо от семантики: время обработки против времени события.
Надеюсь, это поможет.