gpt4 book ai didi

redis - 调整 Airflow 的 celery 可见性超时

转载 作者:行者123 更新时间:2023-12-03 06:44:57 25 4
gpt4 key购买 nike

编辑(2020-4-18):添加了有关元数据数据库的上下文。添加了有关StatsD的上下文。

背景

我操作 Airflow 1.10.3 部署。它使用MySQL 5.7作为元数据数据库。它使用 CeleryExecutor Redis 3.2.5 作为Celery代理。

我将Airflow软件包,我的DAG代码以及任何其他相关配置构建到 1 Docker镜像中。

我的部署为Web服务器,Flower服务器,Scheduler和Workers中的每一个启动Docker容器;它们都是从该1个Docker镜像生成的。 Redis也正在Docker容器中运行;但不是来自与其他Airflow组件相同的Docker镜像。 MySQL没有容器化,并且可以像任何传统的OLTP数据库一样保持并运行。部署顺序包括:

  • 使用任何已更改的DAG代码等构建新的Docker镜像。
  • 杀死当前正在运行的Airflow Docker容器(即Webserver,Scheduler等); Redis容器除外。
  • 从新建的Docker镜像启动新的Docker容器。

  • 部署过程中唯一不会“擦掉并替换掉”的Airflow组件是Redis容器。

    我(连续)每天部署3-7次。

    问题

    通常,在正常运行期间,一组气流任务最终会在其日志中显示以下内容:
    [2018-02-23 12:57:01,711] {models.py:1190} INFO - Dependencies not met for <TaskInstance: userdbs.dump.dedicated 2018-02-21 02:00:00 [running]>, dependency 'Task Instance State' FAILED: Task is in the 'running' state which is not a valid state for execution. The task must be cleared in order to be run.
    [2018-02-23 12:57:01,711] {models.py:1190} INFO - Dependencies not met for <TaskInstance: userdbs.dump.clustered 2018-02-21 02:00:00 [running]>, dependency 'Task Instance Not Already Running' FAILED: Task is already running, it started on 2018-02-23 06:54:44.431988.

    这些任务通常运行很长时间。当我调查时,基本任务通常仍然合法地在运行。我拥有的DAG的任务是处理大量数据,并且合法地需要运行6-10个小时才能成功完成。因此,关于分解这些任务以处理较少数据的讨论不应超出此问题的范围。

    我相信与我的部署方式以及上述日志通常显示的时间有关。 但我没有硬数据来支持这一点。

    一些在线搜索表明,将Celery可见性超时增加到高于我预期的最长运行任务(在所有DAG中)的值,应该可以解决此问题。 我计划实现此操作。

    但是我主要关心的是 是否增加可见性超时(可能会增加到〜11小时)+是否在部署时不杀死Redis容器会使我和Celery一起花费〜11个小时来注意到它需要重新安排任务。这种担忧源自Celery文档( https://docs.celeryproject.org/en/latest/getting-started/brokers/redis.html#id1)的评论:
    Note that Celery will redeliver messages at worker shutdown, so having a long visibility timeout will only delay the redelivery of ‘lost’ tasks in the event of a power failure or forcefully terminated workers.

    问题
  • 我担心celet是否需要大约11个小时才能注意到Celery需要重新计划任务有效的(根据我的部署设置)?
  • 我是否应该考虑杀死Redis容器以及所有其他Airflow组件?我在这里主要关心的是,计划程序一旦启动,是否足够聪明以重建世界的准确 View 。
  • 除了 celery 可见性超时以外,“未满足依赖项”消息是否与有关?如果是这样,该怎么办?新的Airflow版本可以解决这个问题吗?
  • 我配置了StatsD指标。我是否可以分析特定的指标以了解这里发生的情况? (或者是在更新的Airflow版本中引入的新指标可以在此处帮助提高可观察性?)
  • 最佳答案

    无法回答您的所有问题,但:

  • 您将哪个DB用于Airflow? Postgres?你保持下去吗?

  • 我认为您不应该触摸您的Redis容器(换句话说,请保持容器状态)。
    我认为您也应该将其配置为Celery的后端结果。
    另外,请考虑以下配置(我正在使用它):
  • CELERY_ACKS_LATE-任务执行后将确认任务。另请阅读此faq:

    The acks_late setting would be used when you need the task to be executed again if the worker (for some reason) crashes mid-execution.

  • CELERY_TRACK_STARTED-当任务长时间运行并且需要报告当前正在运行的任务时,具有“开始”状态非常有用。

  • 关于指标,对于Celery,您可以使用Flower(不要重新启动此容器!),我看到有一个选项可以为Airflow配置 Statsd(我没有尝试过)。在 airflow.cfg中检查以下配置:
    # Statsd (https://github.com/etsy/statsd) integration settings
    statsd_on = False
    statsd_host = localhost
    statsd_port = 8125
    statsd_prefix = airflow

    关于redis - 调整 Airflow 的 celery 可见性超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61290901/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com