Какой цикл вы пытаетесь выйти? Простой break;
выйдет из внутреннего цикла. Для внешнего цикла вы можете использовать переменную с ограниченным окружением (например, boolean exit = false;), которая установлена в true только перед тем, как вы нарушите внутренний цикл. После того, как внутренний цикл цикла проверяет значение выхода и если true, снова используйте break;
.
Для больших состояний я бы рекомендовал использовать Флинка RocksDBStateBackend
. Этот бэкэнд состояния использует RocksDB для хранения состояния. Поскольку RocksDB изящно разливается на диск, он ограничен только вашим доступным дисковым пространством. Таким образом, Flink сможет справиться с вашим вариантом использования.
На данный момент вам необходимо зарегистрировать таймеры для очистки состояния. Однако со следующим выпуском Flink сообщество добавит очистку для состояния с TTL . После этого он автоматически очистит ваше состояние по истечении срока действия.
Сохранение вашего состояния близко к вашим вычислениям с периодическими контрольными точками, которые сохранятся, сохранит ваше приложение быстрым. Если бы каждый доступ к состоянию передавался в удаленный кластер KV, это значительно замедляло бы обработку.