与 Airflow 元数据数据库的大量连接
High number of connections to Airflow Metadata DB
我试图找到有关 Airflow 与元数据数据库实例(在我的例子中是 Postgres)建立的连接数的信息。
通过 运行 select * from pg_stat_activity
我意识到它至少创建了 7 个状态在 idle
和 idle in transaction
之间变化的连接。查询被注册为 COMMIT
或 SELECT 1
(大部分)。这是在 Airflow 2.1 上使用 LocalExecutor,但我使用 Airflow 1.10 的安装进行了测试,结果相同。
有人知道这些连接来自哪里吗?而且,有没有办法(和理由)改变这个?
是的。 Airflow 将打开大量连接——基本上它创建的每个进程几乎肯定会打开至少一个连接。这是 Apache Airflow 的“已知”特性。
如果您正在使用 MySQL - 这不是一个大问题,因为 MySQL 擅长处理多个连接(它通过线程多路复用传入连接)。 Postgres 使用 process-per-connection 方法,这更需要资源。
推荐的处理方法(Postgres 是 Airflow 最稳定的后端)是使用 PGBouncer 将此类连接代理到 Postgres。
在我们的官方 Helm Chart 中,当使用 Postgres 时,默认使用 PGBouncer。 https://airflow.apache.org/docs/helm-chart/stable/index.html
我强烈推荐这种方法。
我试图找到有关 Airflow 与元数据数据库实例(在我的例子中是 Postgres)建立的连接数的信息。
通过 运行 select * from pg_stat_activity
我意识到它至少创建了 7 个状态在 idle
和 idle in transaction
之间变化的连接。查询被注册为 COMMIT
或 SELECT 1
(大部分)。这是在 Airflow 2.1 上使用 LocalExecutor,但我使用 Airflow 1.10 的安装进行了测试,结果相同。
有人知道这些连接来自哪里吗?而且,有没有办法(和理由)改变这个?
是的。 Airflow 将打开大量连接——基本上它创建的每个进程几乎肯定会打开至少一个连接。这是 Apache Airflow 的“已知”特性。
如果您正在使用 MySQL - 这不是一个大问题,因为 MySQL 擅长处理多个连接(它通过线程多路复用传入连接)。 Postgres 使用 process-per-connection 方法,这更需要资源。
推荐的处理方法(Postgres 是 Airflow 最稳定的后端)是使用 PGBouncer 将此类连接代理到 Postgres。
在我们的官方 Helm Chart 中,当使用 Postgres 时,默认使用 PGBouncer。 https://airflow.apache.org/docs/helm-chart/stable/index.html
我强烈推荐这种方法。