使用flink / kubernetes替换etl作业在sis上:每个作业类型一个flink集群,或者每个作业执行创建和销毁flink集群 好处:缺点:好处缺点

问题描述

我试图看到用apache flink作业(以及下面的kuberentes)替换使用SSIS软件包创建的数百个提要文件ETL作业的可行性。我在某些文章中看到的一个建议是“对一个作业使用一个flink集群”。

由于每种工作类型每天都有少量工作,所以这对我来说最好的方法是在执行工作时动态创建flinkcluster并销毁它以释放资源,这是正确的方法吗?我在没有工作经理的情况下设置了flinkcluster。

关于将flink用于批处理ETL活动的最佳做法的任何建议。

可能是最重要的问题:flink是问题陈述的正确解决方案,还是我应该进一步研究Talend和其他经典的ETL工具?

解决方法

Flink非常适合运行ETL工作负载。两种部署模式为您提供以下属性:

会话集群

会话群集允许在同一组资源(TaskExecutors)上运行多个作业。您在提交任何资源之前启动会话集群。

好处:

  • 提交作业时不需要额外的群集部署时间=>更快的作业提交
  • 如果单个作业不需要很多资源,则资源利用率更高
  • 一个地方来控制您的所有工作

缺点:

  • 作业之间没有严格的隔离
    • 由作业A引起的故障可能导致作业B重新启动
    • 作业A与作业B在同一JVM中运行,因此如果使用statics可能会影响作业

按职位分组

每个作业群集为每个作业启动专用的Flink群集。

好处

  • 严格的工作隔离
  • TaskExecutors上仅运行单个作业,因此可预测更多的资源消耗

缺点

  • 集群部署时间是作业提交时间的一部分,从而导致更长的提交时间
  • 没有一个集群可以控制您的所有工作

推荐

因此,如果您有许多短暂的ETL作业需要快速响应,那么我建议您使用会话群集,因为这样可以避免每个作业的群集启动时间。如果ETL作业的运行时间很长,那么这额外的时间将不会带来任何负担,由于严格的作业隔离,我会选择每作业模式,该模式为您提供了更多可预测的运行时行为。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...