Как сохранить состояние Queryable в Flink?
Я использую FLink v.1.4.0
, Я использую QueryableStateStream
который я в некотором роде, а затем sink
это создать Queryable State
Например:
stream.keyBy(0).asQueryableState("query-name");
Это все хорошо, пока мой Flink
работа запущена Как только работа убита, государство больше не доступно.
У меня есть два вопроса:
- Как мне сохранить состояние запроса? Можно ли это делать через равные промежутки времени, например, контрольно-пропускные пункты? Должен ли я использовать решение Managed State вместо этого?
- Как я могу инициализировать
QueryableState
с данными, сохраненными от предыдущего выполнения?
Буду признателен за практические примеры для обоих вопросов. Благодарю.
1 ответ
Запрашиваемое состояние является управляемым состоянием, и оно будет проверено и восстановлено. Конечно, верно, что состояние Flink недоступно, пока ваше приложение не запущено.
Вы можете прикрепить что-то вроде redis или cassandra или любую другую базу данных, которую вы предпочитаете, в качестве приемника к вашей работе (или сжатой теме Kafka). Это сделает данные доступными, пока ваше задание Flink не выполняется. Но стоит подумать о том, проще ли поддерживать работу базы данных (или Kafka), чем поддерживать работу Flink.
Нет необходимости повторно инициализировать состояние из внешней базы данных, поскольку Flink восстановит свое состояние из контрольной точки или точки сохранения. Но вы можете сделать это в методе open() RichFunction, если это необходимо.