使用 flink/kubernetes 替换 etl 作业(在 ssis 上):每个作业类型一个 flink 集群或每个作业执行创建和销毁 flink 集群

Use of flink/kubernetes to replace etl jobs (on ssis) : one flink cluster per jobtype or create and destroy flink cluster per job execution

我正在尝试查看将使用 SSIS 包创建的数百个提要文件 ETL 作业替换为 apache flink 作业(以及作为底层基础设施的 kuberentes)的可行性。我在某篇文章中看到的一个建议是“将一个 flink 集群用于一种类型的作业”。

因为我每天都有少量的每种工作类型的工作,所以这意味着对我来说最好的方法是在执行工作时即时创建 flinkcluster 并销毁它以释放资源,这是正确的方法吗它?我正在设置没有作业管理器的 flinkcluster。

有关使用 flink 进行批量 ETL 活动的最佳实践的任何建议。

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

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

会话集群

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

好处:

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

缺点:

  • 作业之间没有严格隔离
    • 作业 A 导致的失败会导致作业 B 重新启动
    • 作业 A 运行 与作业 B 在同一 JVM 中,因此如果使用 statics 会影响它

Per-job 集群

A per-job 集群为每个作业启动一个专用的 Flink 集群。

好处

  • 严格的工作隔离
  • 更可预测的资源消耗,因为 TaskExecutors
  • 上只有一个作业 运行s

缺点

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

推荐

因此,如果您有许多需要快速响应的短期 ETL 作业,那么我建议使用会话集群,因为您可以避免每个作业的集群启动时间。如果 ETL 作业有很长的 运行 时间,那么这个额外的时间将没有任何意义,我会选择 per-job 模式,由于严格的作业隔离,它为您提供更可预测的 运行 时间行为.