当重新部署一个Flink有状态函数时,我找不到任何关于版本问题的东西。
当我为一个有状态函数更新和部署代码时,如果该函数有当前执行的实例,会有什么影响。
你可以将有状态函数作为嵌入式函数,或者作为远程函数来实现。
嵌入式函数是直接部署和加载到执行StateFun Job的Flink集群中的,这意味着为了部署一个新版本的嵌入式函数,你需要停止现有的集群,然后用新的函数重新部署它。
对于远程函数,可能会有一个短暂的时刻,在这个时刻,你会有多个版本同时存在(例如:你的函数的k8s部署的滚动升级)在这种情况下,在滚动升级的窗口中,一个定时器可能会在旧版本或新版本上启动(对远程函数没有异步操作支持)。
请注意,状态值本身是协议Buffers消息,所以只要你尊重协议Buffers模式的演化规则,你就能跨版本读取这些值。