Airflow + sqlalchemy 使用短生命周期连接元数据数据库

3

我在CentOS 7.5虚拟机上部署了最新的Airflow,并将sql_alchemy_connresult_backend更新为PostgreSQL实例上的Postgres数据库,将执行程序指定为CeleryExecutor。即使没有启动任何dag甚至没有启动Airflow调度器,在每5秒钟左右就会建立大约一个连接,然后进行SELECT 1SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1的运行并且立即关闭。

当启动调度器并开启dags时,短暂连接的数量急剧增加。有人知道这个原因吗?这是否是一个心跳检查或任务状态检查?在airflow.cfg中设置sql_alchemy_pool_enabled = True后,这些连接不应该更长寿吗?是否有日志可以查看来确定这些持续时间不到一秒的连接的来源?

参考使用的配置值如下

    executor = CeleryExecutor
    sql_alchemy_conn = postgres://..../db1
    sql_alchemy_pool_enabled = True
    sql_alchemy_pool_size = 5
    sql_alchemy_max_overflow = 0
    parallelism = 32
    dag_concurrency = 16
    max_active_runs_per_dag = 16
    worker_concurrency = 16
    broker_url = redis://...
    result_backend = db+postgresql+psycopg2://.../db2
    job_heartbeat_sec = 5
    scheduler_heartbeat_sec = 5

1
尝试添加sql_alchemy_pool_size并设置适当的数字。如果您没有指定,默认值为5。因此,请尝试增加该数字。 - kaxil
感谢@kaxil,池大小为5。增加它似乎有所帮助,直到我打开一个DAG,它立即将我的短连接数量增加了三倍。关闭DAG似乎并没有关闭ping数据库的进程。我仍然看到非常高数量的“select 1”和“select cast('test plain returns' as ...”。是否有设置我错过了,以确保这些ping使用sqlalchemy的连接池中的连接?此外,您能指出我应该在哪里看到这些活动的日志吗?因为我似乎无法在airflow日志中找到任何东西。 - chi
在settings.py中设置logging_level = DEBUG为我提供了关于sqlalchemy正在发生什么的更多信息。请忽略我的日志问题。 - chi
@chi,你在设置日志后有没有找到任何有希望的东西?我现在也遇到了同样的问题,即使启用了连接池,仍然有大量的连接。 - snewman0008
这个有后续吗? - Alejandro Celis
1个回答

1

已经花了将近8个小时,真的帮我省了很多时间! - Shine Mic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接