Пазлы для Flink State Backends
Я получил следующее утверждение: "В зависимости от вашего внутреннего состояния, Flink может также управлять состоянием приложения, то есть Flink имеет дело с управлением памятью (возможно, при необходимости выливаясь на диск), чтобы приложения могли поддерживать очень большое состояние". https://ci.apache.org/projects/flink/flink-docs-master/dev/stream/state/state_backends.html
Означает ли это, что только когда состояние бэкэнда настроено на RocksDBStateBackend, состояние будет храниться в памяти и, возможно, вылиться на диск при необходимости? Однако, если сконфигурировано для MemoryStateBackend\FsStateBackend, состояние сохраняется только в памяти и невозможно выплеснуть на диск, верно?
1 ответ
Да в общем ты прав. Только с RocksDBStateBackend
там будет проливать данные на диск.
В случае обоих MemoryStateBackend
а также FsStateBackend
состояние всегда сохраняется в памяти TaskManager и, следовательно, должно соответствовать ему. Разница между этими двумя бэкэндами заключается в том, как они проверяют данные.
В случае
MemoryStateBackend
данные контрольной точки отправляются в JobManager и хранятся там же в памяти.FsStateBackend
сохраняет данные по контрольной точке в FileSystem и отправляет только небольшие метаданные в JobManager (или в хранилище сценариев HA в папке метаданных)
Поэтому для любых производственных прецедентов RocksDBStateBackend
очень рекомендуется. Более подробную информацию вы можете найти здесь.