【问题标题】:Using airflow's postgres database for application data使用气流的 postgres 数据库获取应用程序数据
【发布时间】:2021-05-18 19:28:40
【问题描述】:

我正在开始一个需要数据仓库的新项目,为此我们将使用 postgres。 (无耻插件:swarm64 使 postgres 成为 TB 级数据集的绝佳 DW 选项)

我正在使用 apache 气流来编排工作负载,但由于我是气流新手,我不确定什么是应用程序数据库需求的最佳实践。

对于更多的上下文,我使用气流的docker-compose.yml,我也是气流新手。

注意到 docker-compose 已经定义了一个 postgres 数据库:

...
  postgres:
    image: postgres:13
    environment:
      POSTGRES_USER: airflow
      POSTGRES_PASSWORD: airflow
      POSTGRES_DB: airflow
    volumes:
      - postgres-db-volume:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "airflow"]
      interval: 5s
      retries: 5
    restart: always
...

我立即想知道添加另一个 postgres 服务是否更好,或者是否将现有服务配置为拥有 2 个用户、2 个数据库...

最终,我会将这个项目迁移到云端,并且可能会使用 AWS postgres RDS 或类似的工具。

那么我的问题是:

  1. 这里的最佳做法是什么?
  2. 如果没有,不同方法之间的权衡是什么?

【问题讨论】:

    标签: postgresql docker-compose airflow


    【解决方案1】:

    Airflow 并不关心你的 DWH 是什么,你可以使用 Hooks 和 Operators 与之交互。它们中的许多都可以作为 Airflow 的 Providers 使用,如果需要,您可以随时编写自定义的。您需要将 Airflow 后端元数据数据库(可以是 PostgreSQL、MySQL)和存储处理数据的分析存储区分开来,这些数据可以是您想要的任何东西(PostgreSQL、MySQL、S3、BigQuery 等)。

    不要让 Airflow 后端数据库也成为您的分析数据库,即使它们都是 PostgreSQL!

    至于你的问题,答案是:

    为您的 Airflow 安装使用普通的 PostgreSQL/MySQL。

    【讨论】:

    • 感谢您的回答,@Elad。显然,无论哪种方式都增加了复杂性,而且显然 Airflow 是在对应用程序 DWH/DB 的关注点分离的情况下构建的。您能否为您的答案提供更多理由?
    • 绑定两个不同的服务没有逻辑。考虑一下,当您使用 Airflow 时,您可能最终会通过运行迁移脚本和升级数据库等命令来升级版本。
    猜你喜欢
    • 2021-02-11
    • 1970-01-01
    • 2014-07-11
    • 2016-10-15
    • 1970-01-01
    • 2016-04-30
    • 2012-10-31
    • 2021-10-31
    • 2019-01-17
    相关资源
    最近更新 更多