我正在尝试用apache-flink作业(以及作为底层基础设施的kuberentes(替换使用SSIS包创建的数百个提要文件ETL作业的可行性。我在一些文章中看到的一个建议是";将一个flink集群用于一种类型的作业";。
由于每种工作类型我每天都有少量的工作,这意味着对我来说,最好的方法是在执行工作时创建一个动态的"硬集群",并将其销毁以释放资源,这是正确的方法吗?在没有经理的情况下,我正在努力工作。
关于使用flink进行批量ETL活动的最佳实践的任何建议。
可能是最重要的问题:flink是问题陈述的正确解决方案,还是我应该更多地研究Talend和其他经典的ETL工具?
会话群集
会话集群允许在同一组资源(TaskExecutors
(上运行多个作业。您可以在提交任何资源之前启动会话集群。
优点:
- 提交作业时不需要额外的集群部署时间=>更快地提交工作
- 如果单个作业不需要太多资源,则资源利用率更高
- 一个控制你所有工作的地方
缺点:
- 作业之间没有严格隔离
- 作业
A
引起的故障可导致作业B
重新启动 - 作业
A
与作业B
在同一JVM中运行,因此如果使用statics
,则会对其产生影响
- 作业
每个作业集群
每个作业集群为每个作业启动一个专用的Flink集群。
好处
- 严格的工作隔离
- 由于只有一个作业在
TaskExecutors
上运行,因此资源消耗更可预测
缺点
- 集群部署时间是作业提交时间的一部分,导致提交时间更长
- 没有一个集群可以控制您的所有作业
建议
因此,如果您有许多需要快速响应的短期ETL作业,那么我建议使用会话集群,因为您可以避免每个作业的集群启动时间。如果ETL作业的运行时间很长,那么这段额外的时间就没有意义了,我会选择按作业模式,因为严格的作业隔离,这会给你带来更可预测的运行时行为。