Запустите потоковое приложение flink с определенного смещения разделов кафки в теме

#kafka-consumer-api #flink-streaming

Вопрос:

Мое приложение Flink указывает на тему кафки с 5 разделами. Каждый раздел содержит данные, полученные в качестве события CDC из исходной базы данных, размещенной для клиента.

 DB1-> topic1.partition1 <- FlinkApp (Task1)
DB2-> topic1.partition2 <- FlinkApp (Task2)
DB3-> topic1.partition3 <- FlinkApp (Task3)
DB4-> topic1.partition4 <- FlinkApp (Task4)
DB5-> topic1.partition5 <- FlinkApp (Task5)
 

Во время обработки мы заметили, что в таблицах DB1 произошли некоторые изменения, которые приводят к изменению структуры сообщений. Это изменение не было сообщено потребителю, поэтому все эти сообщения начали выходить из строя на уровне потребителя. Допустим, сбой начинается с partition1.offset=2000, но он регистрирует ошибку и продолжает обработку, а текущий partition1.offset=5000

В конечном итоге потребителю/FlinkApp необходимо обновить логику, чтобы приспособить новую структуру сообщений при сохранении обратной совместимости. Теперь приложение Flink должно запустить задание для раздела 1.смещение=2000, а остальные разделы должны быть возобновлены с того места, где они были прерваны

Вопрос№1: Позволяет ли flink разработчику реализовывать пользовательскую логику для хранения контрольных точек. Как и в начале приложения, он позволяет начать обработку темы,раздела,смещения (вместо этого просто самый большой/самый маленький). В операторе мы получаем тему,раздел,начальный набор, который оператор обрабатывает сам и сохраняется в базе данных. Когда приложение запускается, оно считывает информацию из этой базы данных и начинает обработку с указанного смещения ?? Это дает нам возможность управлять переработкой.

Примечание: Я сделал это в потоковой передаче spark, но новичок в flink и ищу аналогичный вариант.