Flink - Что такое конфигурация localdir в RocksDB? - PullRequest
0 голосов
/ 12 января 2020

Я новичок на пороге, и у меня возникло недоразумение по поводу конфигурации бэкэнда состояния.

Насколько я знаю, RocksDB сохраняет все состояние приложения в файловой системе. Я использую s3 для хранения состояния, поэтому я настроил state.checkpoints.dir и state.savepoints.dir , указывающие на мой контейнер s3. Теперь я вижу, что есть еще одна опция, связанная с хранилищем RocksDB, которая называется state.backend.rocksdb.localdir . Какова цель этого? (Я видел, что я не могу использовать s3 для этого) Кроме того, если RocksDB использует хранилище локального компьютера для чего-то, что будет, когда я использую Kubernetes, и мой модуль внезапно вышел из строя? я должен использовать постоянное хранилище?

Другое дело, я не уверен, что правильно понял все состояния. Сохраняет ли контрольная точка все мое состояние? Например, когда я использую AggregationFunction и приложение не удалось, когда приложение восстановлено, восстанавливается ли агрегированное значение для каждого ключа?

1 Ответ

2 голосов
/ 12 января 2020

Каждый из бэкэндов состояний Флинка сохраняет свое рабочее состояние где-то локально для каждого работника, сохраняя контрольные точки где-то надёжным, например, S3. В бэкэнде состояния на основе кучи рабочее состояние сохраняется в виде объектов в куче JVM, а в RocksDB рабочее состояние хранится в виде сериализованных байтов на локальном диске (с кэш-памятью вне кучи в памяти). Из соображений производительности вы не хотите использовать S3 (или даже сетевое хранилище) для state.backend.rocksdb.localdir. Если возможно, используйте локальное хранилище SSD.

Да, агрегированное значение для каждого ключа в AggregationFunction будет восстановлено в случае сбоя приложения. Контрольные точки включают все, включая состояние, сохраняемое источниками и приемниками, windows, таймеры, ProcessFunctions, RichFunctions и др. c.

...