优先考虑芹菜中多个队列的队列



我们正在使用芹菜进行异步背景任务,并且有2个队列以用于不同的优先任务。我们有2个节点群,分别提供它们。事情按预期运作良好。

问题:

我们获得的优先任务大多是低优先级任务。为了获得优化的资源利用,我想知道是否有一种方法可以配置工人(聆听高优先级队列)以聆听两个队列。但是,只要有一些工作,就可以从更高的优先级队列中拿起工作?

,后备到低优先级队列。

我已经仔细讨论了基于优先级的任务调度 @芹菜任务优先级。

但是我的问题是优先排序队列,而不仅仅是队列中的任务。

现在可以使用芹菜> = 4.1.1 redis传输(也可能较早的版本)。您只需要在celeryconfig.py模块中设置经纪运输选项即可。使用Kombu4.0.0。

实现此设置
broker_transport_options = {
  visibility_timeout: 1200,  # this doesn't affect priority, but it's part of redis config
  queue_order_strategy: 'priority'
}

也可以使用环境变量指定。

对于一个工人开始 $ celery -A proj worker -l info -Q Q1,Q2闲置工人将首先检查Q1并执行Q1任务,如果在检查Q2之前可用。

来源

奖励主题帮助,这也适用于气流1.10.2工人,除了似乎没有从命令行保留队列订单。使用'queue_order_strategy'='sorted'并命名队列适当地工作(Q1,Q2可以很好地工作)。DAG之间没有保留气流池的优先级,因此确实有帮助!

您可以通过定义工人的多个队列来部分实现这一目标。

您可以使用以下命令来完成:另请参阅此处的更多详细信息。

celery -A proj worker -l info -Q Q1,Q2

尽管这种方法有问题。它不会使用后备方法来做到这一点。由于,听取多个队列的工人在其中均匀分发资源。

因此,即使无法实现"正常优先级队列"中的某些东西,您也只能从"高优先级队列"处理。可以通过为"高优先级队列"分配更多工人(可能为75%)和"正常优先级队列"的25%来最小化这一点。或根据您的工作负载不同的份额。

不幸的是,芹菜开箱即用。

最佳解决方案是启动2名工人。1对于低优先级,其他n过程的优先级。

当没有高优先级任务时,具有较低优先任务的工人将使用所有资源,反之亦然。如果这两个任务都将均匀分配。

相关内容

  • 没有找到相关文章

最新更新