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