Как вы сказали, MemoryStateBackend
и FSStateBackend
основаны на HeapKeyedStateBackend
.Это означает, что оба бэкэнда состояния поддерживают состояние оператора как обычные объекты в куче JVM TaskManager, то есть к состоянию всегда осуществляется доступ в памяти.
Бэкэнды отличаются тем, как они сохраняют состояние для контрольных точек.Контрольная точка - это копия состояния всех операторов приложения, которое где-то хранится.В случае сбоя приложение перезапускается, и состояние операторов инициализируется с контрольной точки.
FSStateBackend
хранит контрольную точку в файловой системе, обычно HDFS, S3 или NFS, котораямонтируется на всех рабочих узлах.MemoryStateBackend
сохраняет состояние в JVM JobManager.Это имеет следующие плюсы и минусы:
Плюсы:
- Нет необходимости настраивать (распределенную) файловую систему.
- Нет необходимости настраивать расположение хранилища.
Минусы:
- Состояние теряется, если процесс JobManager умирает.
- Размер состояния связан с размером памяти JobManager.
Поскольку контрольные точки теряются при выходе из строя JM, MemoryStateBackend
не подходит для большинства случаев производственного использования.Это может быть полезно для разработки и тестирования приложений с отслеживанием состояния, поскольку не требует настройки или настройки.