Flink Stateful Функция Redeploy - PullRequest
1 голос
/ 02 мая 2020

Я не могу найти что-либо, связанное с проблемами управления версиями при повторном развертывании функции с сохранением состояния Flink.

Когда я обновляю и внедряю код для функции с состоянием, которая в данный момент выполняет экземпляры, как это влияет на:

  1. Экземпляры, которые в данный момент выполняются, но не ожидают обратных вызовов?
  2. Экземпляры, которые в данный момент ожидают асинхронный c обратный вызов (какой код выполняется при возврате обратного вызова)?
  3. Если или 1, или 1 2 может выполнять новый код, как, возможно, обрабатывается сохраняющееся состояние двух версий функций между старой версией и новой исполняемой версией?
  4. Если 2 не обновляется автоматически, как вызвать новую функцию версия для запуска, когда я хочу, чтобы это происходило для долго работающей функции (скажем, она ожидала обратного вызова на 30-дневном таймере, и я хотел, чтобы новая версия выполнялась при возврате обратного вызова)? И если я могу обновить версию, каков метод борьбы с возможными добавлениями или удалением сохраненного состояния между версиями?

1 Ответ

2 голосов
/ 04 мая 2020

Вы можете реализовать функцию с отслеживанием состояния либо как встроенную функцию, либо как удаленную функцию.

  • Встроенная функция развертывается и загружается непосредственно в кластер Flink, который выполнил задание StateFun , Это означает, что для развертывания новой версии встроенной функции вам необходимо остановить существующий кластер и повторно развернуть его с новой функцией. В этом режиме:

    1. Не имеет значения, поскольку все существующие экземпляры будут отключены.
    2. Когда будет загружена новая версия вашего приложения, все ранее зарегистрированные таймеры будут доставлено (при условии, что прошло время), и любые незавершенные асинхронные операции будут доставлены со статусом «неизвестно».
  • Для удаленных функций может быть короткий момент времени где у вас будет одновременно несколько версий (например: непрерывное обновление развертывания вашей функции на k8s). В этом случае таймер может сработать либо в старой версии, либо в новой (асинхронный режим * 1020 отсутствует). * поддержка операций для удаленных функций) во время этого обновления. В любом случае любые изменения состояния будут видны согласованным образом между версиями.

Обратите внимание, что сами значения состояния являются сообщениями буфера протокола, если вы уважаете протокол Правила эволюции схемы буферов, вы сможете прочитать значения в разных версиях.

...