我们一直在使用Airflow,这很棒。
现在我们正在考虑将一些非常频繁的任务转移到我们的气流服务器中。
假设我每秒都有一个脚本运行。
使用气流安排它的最佳做法是什么:
在每秒安排的DAG中运行此脚本。我非常怀疑这将是解决方案,DAGRUN
在6小时后停止的while循环中运行此脚本,然后在Airflow上安排它每6小时运行一次?
创建一个没有计划的DAG,将任务置于一个具有适当睡眠时间的True循环中,因此除非出现错误,否则任务将永远不会终止。
还有其他建议吗?
或者这种任务不适合Airflow?应该使用lambda函数和AWS调度程序吗?
干杯!
答案 0 :(得分:2)
安排它的最佳做法是什么
- ......这种任务不适合Airflow?
醇>
不适合。
特别是,您的气流可能配置为每5秒重新检查一组DAG,这听起来不适合1秒钟的任务。此外,调度开销与执行工作的比率也不具吸引力。我想你可以安排五个同时完成的任务,每分钟十二次,并让他们睡眠零到四秒,但这只是疯了。而且你可能需要锁定自己"避免同时执行兄弟姐妹任务的脚趾。
六小时的建议(2.)并不疯狂。我会将其视为一个60分钟的@hourly任务,因为开销很相似。一小时后退出并让气流重生有几个好处。日志滚动定期发生。如果您的程序崩溃,它将在很长时间之前重新启动。如果您的主机重新启动,您的程序将在不久之后重新启动。缺点是您的业务需求可能超过一分钟"因为"太长了"。在小时边界协调重叠任务或任务之间的差距可能会带来一些问题。
您声明的需求完全符合Supervisor解决的问题。只是使用它。即使主机崩溃,即使应用程序崩溃,您也将始终只运行一个事件循环副本。日志滚动和其他管理细节已经解决。代码库已经成熟,许多人已经打败了它并整合了他们的功能请求。它符合您的要求。