pg_flo完全指南:如何实时同步PostgreSQL数据的终极解决方案

pg_flo完全指南:如何实时同步PostgreSQL数据的终极解决方案

【免费下载链接】pg_flo Stream, transform, and route PostgreSQL data in real-time. 【免费下载链接】pg_flo 项目地址: https://gitcode.com/gh_mirrors/pg/pg_flo

pg_flo是实现PostgreSQL数据实时同步的终极解决方案,它能够捕获插入、更新、删除和DDL变更并进行近实时处理,还支持数据转换和路由功能,让数据流动变得简单高效。

为什么选择pg_flo进行PostgreSQL实时同步?

在当今数据驱动的时代,实时数据同步对于业务连续性和决策制定至关重要。pg_flo作为一款专为PostgreSQL设计的实时数据同步工具,具有以下显著优势:

核心功能亮点 ✨

  • 实时数据流式传输:近实时捕获数据库的各种变更操作,包括插入、更新、删除和DDL变更
  • 快速初始加载:并行复制现有数据,并自动跟进持续的复制过程
  • 强大的数据转换:可在数据流动过程中进行过滤和转换操作(查看规则)
  • 灵活的路由功能:能够将数据路由到不同的表并重新映射列(了解路由)
  • 生产级可靠性:支持可恢复的流式传输、DDL跟踪等企业级特性

常见使用场景 📊

pg_flo适用于多种数据同步需求:

  • PostgreSQL数据库之间的实时数据复制
  • 带有数据转换的ETL管道
  • 数据重新路由、屏蔽和过滤
  • 零停机时间的数据库迁移
  • 从PostgreSQL进行事件流处理

查看详细示例 →

快速上手:3步实现PostgreSQL实时同步

准备工作

在开始使用pg_flo之前,请确保您的环境满足以下要求:

  • Docker
  • 配置了wal_level=logical的PostgreSQL数据库

1. 安装pg_flo

通过Docker快速安装pg_flo:

docker pull pgflo/pg_flo:latest

2. 配置同步参数

您可以通过以下方式之一配置pg_flo:

  • 环境变量
  • YAML配置文件(示例)
  • CLI标志

3. 启动同步服务

# 启动NATS服务器
docker run -d --name pg_flo_nats \
  --network host \
  -v /path/to/nats-server.conf:/etc/nats/nats-server.conf \
  nats:latest \
  -c /etc/nats/nats-server.conf

# 启动复制器(使用配置文件)
docker run -d --name pg_flo_replicator \
  --network host \
  -v /path/to/config.yaml:/etc/pg_flo/config.yaml \
  pgflo/pg_flo:latest \
  replicator --config /etc/pg_flo/config.yaml

# 启动工作器
docker run -d --name pg_flo_worker \
  --network host \
  -v /path/to/config.yaml:/etc/pg_flo/config.yaml \
  pgflo/pg_flo:latest \
  worker postgres --config /etc/pg_flo/config.yaml
示例配置文件 (config.yaml)
# 复制器设置
host: "localhost"
port: 5432
dbname: "myapp"
user: "replicator"
password: "secret"
group: "users"
tables:
  - "users"

# 工作器设置(PostgreSQL目标)
target-host: "dest-db"
target-dbname: "myapp"
target-user: "writer"
target-password: "secret"

# 通用设置
nats-url: "nats://localhost:4222"

查看完整配置选项 →

pg_flo核心概念解析

架构设计

pg_flo采用了两个主要组件来实现数据同步:

  • 复制器(Replicator):通过逻辑复制捕获PostgreSQL的变更
  • 工作器(Worker):通过NATS处理和路由变更数据

分组机制

分组用于:

  • 识别复制进程
  • 隔离复制槽和发布
  • 在同一数据库上运行多个实例
  • 维护可恢复性的状态
  • 启用并行处理
# 示例:为不同的表使用不同的分组
pg_flo replicator --group users_orders --tables users,orders

pg_flo replicator --group products --tables products

三种同步模式

pg_flo提供了三种数据同步模式,以满足不同的业务需求:

  1. 仅流模式(Stream Only) (默认)
    • 实时流式传输变更数据
pg_flo replicator --stream
  1. 仅复制模式(Copy Only)
    • 一次性并行复制现有数据
pg_flo replicator --copy --max-copy-workers-per-table 4
  1. 复制加流模式(Copy and Stream)
    • 初始并行复制,然后进行持续流式传输
pg_flo replicator --copy-and-stream --max-copy-workers-per-table 4

支持的目标 destinations

pg_flo支持多种数据目标:

  • stdout:控制台输出
  • file:文件写入
  • postgres:数据库复制
  • webhook:HTTP端点

查看目标详情 →

高级功能使用指南

消息路由配置

路由配置在单独的YAML文件中定义:

# routing.yaml
users:
  source_table: users
  destination_table: customers
  column_mappings:
    - source: id
      destination: customer_id
# 应用路由配置
pg_flo worker postgres --routing-config /path/to/routing.yaml

了解更多路由信息 →

数据转换规则

转换规则在单独的YAML文件中定义:

# rules.yaml
tables:
    users:
      - type: exclude_column
        columns: password
      - type: exclude_column
        columns: ssn
      - type: transform
        column: email
        parameters:
          type: mask
          mask_char: "*"
# 应用转换规则
pg_flo worker file --rules-config /path/to/rules.yaml

查看转换选项 →

综合使用示例

pg_flo worker postgres --config /etc/pg_flo/config.yaml --routing-config routing.yaml --rules-config rules.yaml

扩展pg_flo同步能力

最佳实践

  • 每个分组运行一个工作器
  • 使用分组独立复制不同的表
  • 通过多个分组进行水平扩展

扩展设置示例

# 分组:sales
pg_flo replicator --group sales --tables sales
pg_flo worker postgres --group sales

# 分组:inventory
pg_flo replicator --group inventory --tables inventory
pg_flo worker postgres --group inventory

注意事项和限制

在使用pg_flo时,请注意以下事项:

  • NATS消息大小:8MB(可配置)
  • 建议每个分组使用一个工作器
  • 需要PostgreSQL逻辑复制的先决条件
  • 表必须具有以下之一才能进行复制:
    • 主键
    • 带有NOT NULL列的唯一约束
    • 设置了REPLICA IDENTITY FULL

示例表配置

-- 使用主键(推荐)
CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  email TEXT,
  name TEXT
);

-- 使用唯一约束
CREATE TABLE orders (
  order_id TEXT NOT NULL,
  customer_id TEXT NOT NULL,
  data JSONB,
  CONSTRAINT orders_unique UNIQUE (order_id, customer_id)
);
ALTER TABLE orders REPLICA IDENTITY USING INDEX orders_unique;

-- 使用所有列(在性能方面开销较高)
CREATE TABLE audit_logs (
  id SERIAL,
  action TEXT,
  data JSONB
);
ALTER TABLE audit_logs REPLICA IDENTITY FULL;

开发和贡献

开发命令

make build
make test
make lint

# 端到端测试
./internal/scripts/e2e_local.sh

如何贡献

欢迎贡献!请打开issue或提交pull request。

许可证

Apache License 2.0。查看许可证 →

【免费下载链接】pg_flo Stream, transform, and route PostgreSQL data in real-time. 【免费下载链接】pg_flo 项目地址: https://gitcode.com/gh_mirrors/pg/pg_flo

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值