IntervalJoin слишком долго застревает в rockdb'seek в flink-1.6.2 - PullRequest
0 голосов
/ 20 ноября 2018

Я использую функцию IntervalJoin для объединения двух потоков в течение 10 минут.Как показано ниже:

labelStream.intervalJoin(adLogStream)
           .between(Time.milliseconds(0), Time.milliseconds(600000))
           .process(new processFunction())
           .sink(kafkaProducer)

labelStream и adLogStream являются классом proto-buf, для которых используется Long id.

Наши два входных потока огромны.Примерно после 30 минут работы вывод kafka медленно снижается, например: enter image description here

Когда вывод данных начинает снижаться, я использую jstack и pstack sevaral времена, чтобы получить эти: enter image description here enter image description here

Кажется, программа застряла в поиске rockdb.И я нахожу, что к некоторому файлу srt в rockdb обращаются медленно итерацией.enter image description here

Я пробовал несколько способов:

1)Reduce the input amount to half. This works well.
2)Replace labelStream and adLogStream with simple Strings. This way, data amount will not change. This works well.
3)Use PredefinedOptions like SPINNING_DISK_OPTIMIZED and SPINNING_DISK_OPTIMIZED_HIGH_MEM. This still fails.
4)Use new versions of rocksdbjni. This still fails.

Может кто-нибудь дать мне несколько советов?Большое спасибо.

1 Ответ

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

Несколько мыслей:

  • Вы можете задать вопрос в списке рассылки flink-user - в целом, подобные рабочие вопросы с большей вероятностью вызовут осведомленные ответы в списке рассылки, чемпри переполнении стека.

  • Я слышал, что если RocksDB выделять больше памяти вне кучи, это может помочь, поскольку RocksDB будет использовать ее для кэширования.Извините, но я не знаю, как узнать, как это настроить.

  • Возможно, поможет увеличение параллелизма.

  • Если это возможно, было бы интересно попробовать запустить с использованием кучи.вместо этого укажите бэкэнд, просто чтобы увидеть, какая часть боли вызвана RocksDB.

...