Как сохранить состояние Queryable в Flink?

Я использую FLink v.1.4.0, Я использую QueryableStateStream который я в некотором роде, а затем sink это создать Queryable StateНапример:

stream.keyBy(0).asQueryableState("query-name");

Это все хорошо, пока мой Flink работа запущена Как только работа убита, государство больше не доступно.

У меня есть два вопроса:

  1. Как мне сохранить состояние запроса? Можно ли это делать через равные промежутки времени, например, контрольно-пропускные пункты? Должен ли я использовать решение Managed State вместо этого?
  2. Как я могу инициализировать QueryableState с данными, сохраненными от предыдущего выполнения?

Буду признателен за практические примеры для обоих вопросов. Благодарю.

1 ответ

Решение

Запрашиваемое состояние является управляемым состоянием, и оно будет проверено и восстановлено. Конечно, верно, что состояние Flink недоступно, пока ваше приложение не запущено.

Вы можете прикрепить что-то вроде redis или cassandra или любую другую базу данных, которую вы предпочитаете, в качестве приемника к вашей работе (или сжатой теме Kafka). Это сделает данные доступными, пока ваше задание Flink не выполняется. Но стоит подумать о том, проще ли поддерживать работу базы данных (или Kafka), чем поддерживать работу Flink.

Нет необходимости повторно инициализировать состояние из внешней базы данных, поскольку Flink восстановит свое состояние из контрольной точки или точки сохранения. Но вы можете сделать это в методе open() RichFunction, если это необходимо.

Другие вопросы по тегам