Управление памятью при потоковой передаче flink vs flink batch - PullRequest
0 голосов
/ 01 мая 2020

Я просматривал множество блогов и ответов о переполнении стека, но мне не совсем понятно, как управлять памятью Flink. В нескольких блогах я нашел "Memory Manager Pool" и "Rocksdb". Я использую rockdb, и я предполагаю, что все мое состояние хранится в этой базе данных.

Вот мои сомнения ..

  • Как обрабатывается процесс управления памятью в потоковом режиме?
  • В чем разница между управлением памятью в потоковом и пакетном режиме?
  • Разница между "Пулом диспетчера памяти" и "внутренним состоянием (Rcokdb")
  • Что в потоковом режиме вы подразумеваете под "Flink Managed Memory"? включает в себя память, необходимую для кэша RacksDb и буферов?

Ответы [ 2 ]

3 голосов
/ 04 мая 2020

Потоковое

При использовании RocksDBStatebackend все KeyedState (ValueState, MapState, ... и Timers) сохраняются в RocksDB. OperatorState хранится в куче. OperatorState обычно очень маленький и редко используется напрямую разработчиком Flink.

Для Flink 1.10+ управляемая память включает в себя всю память, используемую RocksDB. Flink гарантирует, что использование памяти RocksDB остается в пределах назначенной управляемой памяти. Используйте taskmanager.memory.managed.fraction, чтобы настроить объем памяти, выделяемый RocksDB. Обычно вы можете отдать всю память, кроме 500 МБ, RockSDB.

Пакетная обработка

Пакетные программы не используют Statebackend. Управляемая память используется для соединений вне кучи, сортировки и т. Д. c. Конфигурации памяти, такие как taskmanager.memory.managed.fraction, одинаковы для пакетной и потоковой передачи.

0 голосов
/ 04 мая 2020

Согласно Flink документов Управление памятью в потоковой и пакетной обработки по-разному

...