如何在零停机时间下进行滚动升级

时间:2019-01-23 17:21:59

标签: apache-flink flink-streaming

是否可以在零停机时间内进行作业版本更新?

也许和HA configuration在一起?例如,用更新的作业替换备用作业,然后取消主文件,这将使standby(更新的)成为master,然后上传新的更新作业,而不是我们的master在前一阶段取消,以保持HA。 这种情况可能吗?还有其他方案可以使作业版本更新实现零停机吗?

1 个答案:

答案 0 :(得分:1)

我认为Flink HA模式实际上不适合零停机作业升级。 HA模式可确保可以替换发生故障的Jobmanager,而不会丢失状态信息,但不是HA,就意味着在主要Jobmanager发生故障与次要Jobmanager接管之间仍然出现“不可用性”。 (或者在像Kubernetes这样的系统中,当单独的Jobmanager无法通过健康检查并被替换时)

对于某些类型的作业,零停机时间升级是可能的,但Flink本身不支持。例如,如果您的作业输出到Elasticsearch索引,则可以从保存点中将升级后的作业与原始索引并行显示,但写入新索引中,并在捕获到新索引时切换客户端(或Elasticsearch索引别名)引用新索引。

我考虑过但从未尝试过的另一种技术是在应用程序中构建一种配置标记的方法,该标记说明何时开始或停止发射数据。这样,您可以更新原始作业的配置,以删除(而不是转发到接收器)任何在不久的将来的某个时间戳记开始的窗口数据,然后运行升级的作业并将其配置为在该时间发出第一个窗口。

对零停机时间“越区切换”的内置支持是一项功能,在许多用例中,Flink都非常不错。