问题描述
我试图看到用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作业的运行时间很长,那么这额外的时间将不会带来任何负担,由于严格的作业隔离,我会选择每作业模式,该模式为您提供了更多可预测的运行时行为。