#java #java-stream #state #bigdata #apache-flink
Вопрос:
У меня возникли некоторые проблемы с моим приложением flink. Есть 2 потока — основной поток отправляет данные постоянно и без каких-либо перерывов. Вторичный поток отправляет данные один раз в день. Размер отправляемых данных составляет около 17 ГБ, и они передаются в течение нескольких часов. Цель состоит в том, чтобы присоединиться к 2 потокам. Для этого я сохраняю вторичный поток в широковещательном состоянии и обновляю его каждый день в соответствии с определенной логикой, чтобы размер состояния в любое время не превышал 20 ГБ.
Когда я обрабатываю элемент из основного потока, я соединяю элемент с соответствующим элементом из состояния широковещания.
Проблема, с которой я сталкиваюсь, заключается в том, что, когда я запускаю программу в удаленной среде (open shift), память и процессор быстро увеличиваются, поэтому программа выходит из строя, когда они превышают максимальные значения, и перезапускается снова. Я знаю, что могу увеличить процессор и память, но мои вопросы таковы:
- является ли 20 ГБ слишком большим для состояния вещания? Насколько я знаю, состояние трансляции сохраняется только в оперативной памяти и копируется в любой модуль (машину) и не может быть разделено.
- если он слишком велик для состояния вещания, какие альтернативы я могу использовать? Может быть, обычный штат?
Примечание: размер вторичного потока планируется увеличивать с течением времени, поэтому размер состояния широковещания.
Спасибо
Комментарии:
1. Как вы соединяете вторичный поток с основным потоком? Если он использует поле или некоторую комбинацию полей, то просто используйте обычный поток вместо широковещательного потока и введите его (и основной поток) этим ключом. Затем вы можете сохранить вторичный поток в состоянии, которое разделено/распределено.