Как сохранить запрашиваемое состояние во Flink?

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

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

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

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

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

Я был бы признателен за практические примеры для обоих вопросов. Спасибо.


person Christos Hadjinikolis    schedule 24.01.2018    source источник


Ответы (1)


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

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

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

person David Anderson    schedule 24.01.2018