Хорошо, так что если вы хотите иметь возможность перезапустить задание и сохранить данные, тогда я бы предложил использовать состояние Flink, которое является контрольной точкой. Я не знаю точного варианта использования, поэтому я не могу сказать, следует ли Вам использовать KeyedState или Operator State. Но в основном идея состоит в том, чтобы сохранить номера карт или все, что вы используете для проверки, в состоянии, а затем отменить свою работу с точкой сохранения, и всякий раз, когда вы захотите запустить ее снова, вы можете начать с указанной точки сохранения. Таким образом, у вас никогда не будет пустого списка недействительных номеров карт. Вы можете прочитать больше о состоянии здесь: https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/state/state.html
Что касается случая, когда Вы хотите сохранить недействительные номера карт внешне, то Вы можете, например, вывести на сторону номера карт, которые были недействительными и потопить их в Кафку или файл. Таким образом, вы сможете получить к ним доступ в любом приложении или компоненте. Вы можете найти больше о побочных выходах здесь: https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/side_output.html