Как сохранить контрольную точку в удаленном RocksDB в Apache Flink

Я знаю, что в Apache Flink есть три типа серверных модулей состояния: MemoryStateBackend, FsStateBackend и RocksDBStateBackend.

MemoryStateBackend сохраняет контрольные точки в локальной ОЗУ, FsStateBackend сохраняет контрольные точки в локальной файловой системе, а RocksDBStateBackend сохраняет контрольные точки в RocksDB. У меня есть вопросы по RocksDBStateBackend.

Насколько я понимаю, механизм RocksDBStateBackend был встроен в Apache Flink. RockDB - это своего рода база данных типа "ключ-значение". Итак, если я прав, это означает, что Flink сохранит все контрольные точки во встроенной RockDB, которая использует локальный диск.

Если это так, я думаю, что в некоторых случаях диск мог быть исчерпан из-за контрольных точек, хранящихся в RockDB. Теперь я думаю, можно ли настроить удаленную RockDB для хранения этих контрольных точек? Если это возможно, стоит ли беспокоиться о сбое удаленного RocksDB? Если удаленный RocksDB дает сбой, работа Flink не может продолжать работать, верно?


person Yves    schedule 07.05.2020    source источник


Ответы (2)


Нет возможности использовать внешний или удаленный RocksDB с Apache Flink. RocksDB - это встроенное хранилище ключей и значений с локальным экземпляром в каждом диспетчере задач.

Несколько моментов:

  • Flink проводит четкое различие между рабочим состоянием, которое всегда является локальным (для хорошей производительности), и снимками состояния (контрольные точки и точки сохранения), которые не являются локальными (для надежности они должны храниться в распределенной файловой системе).

  • RocksDBStateBackend использует локальный диск для рабочего состояния. Два других серверных модуля состояния сохраняют свое рабочее состояние в куче Java.

  • Координатор контрольных точек организует сбор всех этих срезов данных, разбросанных по всем диспетчерам задач, в полные контрольные точки, которые хранятся в другом месте. В случае MemoryStateBackend эти контрольные точки хранятся в куче JobManager; для двух других они находятся в распределенной файловой системе.

Вы хотите настроить RocksDB для использования самой быстрой доступной локальной файловой системы. Попробуйте использовать локально подключенные твердотельные накопители и избегайте сетевых хранилищ (например, EBS). Не пытайтесь использовать распределенную файловую систему, такую ​​как S3, в качестве локального хранилища RocksDB.

state.backend.rocksdb.localdir определяет, где каждая локальная база данных RocksDB хранит свое рабочее состояние.

Параметр конструктора RocksDBStateBackend управляет местом хранения контрольных точек. Например, использование S3 в соответствии с рекомендациями @ezequiel - очевидный выбор для AWS.

person David Anderson    schedule 07.05.2020

RocksDB может работать с любой поддерживаемой файловой системой с помощью Flink https://ci.apache.org/projects/flink/flink-docs-stable/ops/filesystems/

Если вы используете Flink, вероятно, вы хотите пройти контрольную точку и продолжить с них.

Я бы вынес хранилище за пределы узла. Если вы используете облачного провайдера, такого как AWS, то S3 - правильный вариант.

Поэтому вам, вероятно, следует написать что-то вроде: new RocksDBStateBackend("s3://my-bucket", true); и присвоить это своей среде выполнения.

Пожалуйста, проверьте приведенную выше документацию, чтобы правильно настроить вашу файловую систему.

person Ezequiel    schedule 07.05.2020