重新部署Flink有状态功能时,我找不到有关版本控制问题的任何信息。
当我为当前正在执行实例的有状态功能更新和部署代码时,这会对以下内容产生什么影响:
答案 0 :(得分:2)
您可以将状态功能实现为嵌入式功能或远程功能。
已将嵌入式功能部署并直接加载到执行StateFun Job的Flink集群中。 这意味着,为了部署嵌入式功能的新版本,您需要停止现有集群,然后使用新功能重新部署它。 在该模式下:
对于远程功能,可能会在很短的时间内同时存在多个版本(例如:对功能的k8s部署进行滚动升级) 在这种情况下,计时器可能会在旧版本或新版本上触发(不支持远程功能的异步操作) 在滚动升级的那个窗口期间。 在任何情况下,任何状态修改都会在版本之间以一致的方式可见。
请注意,状态值本身就是协议缓冲区消息,因此,只要您遵守协议缓冲区架构演变规则,就可以读取各个版本的值。