Apache Flink - добавочная контрольная точка - неожиданный размер CP - PullRequest
0 голосов
/ 31 октября 2018

После добавления некоторого управляемого состояния во время обработки мы обнаружили вызывающее беспокойство увеличение размера и продолжительности контрольных точек, несмотря на использование инкрементной контрольной точки с RocksDb.

Чтобы изолировать проблему, мы создали простую топологию с источником, оператором карты и приемником.

Источник создает в памяти произвольное количество событий с пропускной способностью 1 событие в секунду. Каждое событие имеет уникальный идентификатор, который используется для секционированного потока (с помощью оператора keyBy) и проходит через функцию карты, которая добавляет около 100 КБ к управляемому состоянию (используется ValueState). Затем события просто передаются в приемник, который ничего не делает.

Используя вышеописанную настройку, мы отправили 1200 событий с интервалом проверки и минимальной паузой, равной 5 с. Поскольку события происходили с постоянной скоростью и равным количеством состояний, мы ожидали, что размер контрольных точек будет более или менее постоянным. Однако мы наблюдали линейно растущие пики размера контрольных точек (при этом последний пик имел почти 120 МБ, близкий к размеру всего ожидаемого управляемого состояния) с небольшими контрольными точками между ними. Для мониторинга мы использовали метрику, выставленную Флинком и Прометеем с Графаной, см. Некоторые: контрольных точек

Мы хотели бы понять, почему мы наблюдаем пики ХП и почему они постоянно растут?

Каковы причины того, что некоторые CP сохраняют ожидаемый размер (около 500 кБ), а некоторые имеют размер вокруг всего текущего размера управляемого состояния, даже если нагрузка постоянна?

Что именно измеряется метрикой lastCheckpointSize при использовании инкрементной контрольной точки?

Любые намеки, объяснения будут высоко оценены,

Заранее спасибо.

1 Ответ

0 голосов
/ 01 ноября 2018

Инкрементальные контрольные точки Flink должны (1) хорошо масштабироваться до очень большого состояния и (2) позволять восстановление с контрольных точек, чтобы быть достаточно эффективным, даже после выполнения миллионов контрольных точек после запуска в течение нескольких недель или месяцев за раз. В частности, необходимо периодически объединять / объединять старые контрольные точки, чтобы никто не пытался восстановить их из неограниченной цепочки контрольных точек, уходящей в далекое прошлое. Вот почему вы увидите, что некоторые контрольные точки выполняют больше работы, чем другие, даже при постоянной нагрузке. Также обратите внимание, что этот эффект более заметен при тестировании с небольшими объемами состояния (120 МБ мало по сравнению с 10+ терабайтами состояния, с которыми некоторые пользователи Flink сообщают о работе).

Чтобы понять, как инкрементальная контрольная точка Флинка работает более подробно, я предлагаю посмотреть выступление Стефана Рихтера из Flink Forward .

...