Seatunnel 把Postgresql数据同步到Doris中

  • SeaTunnel是一个非常易用、超高性能的分布式数据集成平台,支持实时海量数据同步。
  • Postgresql 数据库。
  • Apache Doris 是一款基于 MPP 架构的高性能、实时分析型数据库。它以高效、简单和统一的特性著称,能够在亚秒级的时间内返回海量数据的查询结果。Doris 既能支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于这些优势,Apache Doris 非常适合用于报表分析、即席查询、统一数仓构建、数据湖联邦查询加速等场景。用户可以基于 Doris 构建大屏看板、用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。

版本要求:

Postgresql --> server 14.6

Seatunnel --> apache-seatunnel-2.3.9

Doris --> apache-doris-3.0.3

1.部署Doris
官网

Doris 1台master 2台节点

1.1 配置好每台的时间同步

1.2 配置好每台的文件句柄数

复制代码
vi /etc/security/limits.conf 
* soft nofile 1000000
* hard nofile 1000000

1.3 java选择

在 2.1(含)版本之前,请使用 Java 8,推荐版本:jdk-8u352 之后版本。

从 3.0(含)版本之后,请使用 Java 17,推荐版本:jdk-17.0.10 之后版本。

1.4 关闭 swap 分区

复制代码
swapoff -a #临时关闭
注释修改/etc/fstab #永久关闭

1.5 安装包下载

1.6 安装步骤

1.6.1 FE 集群部署

复制代码
tar -xf apache-doris-3.0.3.bin.tar.gz

1.6.2 EF配置文件,每个节点都可以使用同一个配置如何java路径一致的话。

复制代码
cat apache-doris-3.0.3/fe/conf/fe.conf
...
## modify case sensitivity
lower_case_table_names = 1
## modify Java Home
JAVA_HOME = <your-java-home-path>
...
#其他配置不动

1.6.3 先启动master节点

复制代码
bin/start_fe.sh --daemon

1.6.4 mysql工具登录doris添加FE Follower 节点2台

复制代码
mysql -uroot -P<fe_query_port> -h<fe_ip_address>
ALTER SYSTEM ADD FOLLOWER "<fe_ip_address>:<fe_edit_log_port>"

1.6.5 启动 FE Follower 节点填写master-ip和端口

复制代码
bin/start_fe.sh --helper <helper_fe_ip>:<fe_edit_log_port> --daemon

1.6.6 查看FE状态

复制代码
show frontends\G;
#IsMaster: true 代表是master节点

1.7 部署 BE集群,其他所有节点都可以使用这个配置

复制代码
cat be/conf/be.conf
...
storage_root_path=/home/data1;/home/data2;/home/data3
JAVA_HOME = <your-java-home-path>
mem_limit = 4G
...

#创建
mkdir /home/data1
mkdir /home/data2
mkdir /home/data3

1.7.1 在 Doris 中注册 BE 节点

复制代码
## connect a alive FE node
mysql -uroot -P<fe_query_port> -h<fe_ip_address>
   
## registe BE node
ALTER SYSTEM ADD BACKEND "<be_ip_address>:<be_heartbeat_service_port>"

1.7.2 启动 BE 进程

复制代码
bin/start_be.sh --daemon

1.7.3 查看 BE 启动状态

复制代码
## connect a alive FE node
mysql -uroot -P<fe_query_port> -h<fe_ip_address>
   
## check BE node status
show backends\G;

1.8 验证集群正确性

复制代码
## connect a alive fe node
mysql -uroot -P<fe_query_port> -h<fe_ip_address>

1.8.1 修改 Doris 集群密码

复制代码
-- check the current user
select user();  
+------------------------+  
| user()                 |  
+------------------------+  
| 'root'@'192.168.88.30' |  
+------------------------+  
     
-- modify the password for current user
SET PASSWORD = PASSWORD('doris_new_passwd');

1.8.2 创建测试表并插入数据

复制代码
-- create a test database
create database testdb;
 
-- create a test table
CREATE TABLE testdb.table_hash
(
    k1 TINYINT,
    k2 DECIMAL(10, 2) DEFAULT "10.5",
    k3 VARCHAR(10) COMMENT "string column",
    k4 INT NOT NULL DEFAULT "1" COMMENT "int column"
)
COMMENT "my first table"
DISTRIBUTED BY HASH(k1) BUCKETS 32;

1.8.3 Doris 兼容 MySQL 协议,可以使用 INSERT 语句插入数据。

复制代码
-- insert data
INSERT INTO testdb.table_hash VALUES
(1, 10.1, 'AAA', 10),
(2, 10.2, 'BBB', 20),
(3, 10.3, 'CCC', 30),
(4, 10.4, 'DDD', 40),
(5, 10.5, 'EEE', 50);

-- check the data
SELECT * from testdb.table_hash;
+------+-------+------+------+
| k1   | k2    | k3   | k4   |
+------+-------+------+------+
|    3 | 10.30 | CCC  |   30 |
|    4 | 10.40 | DDD  |   40 |
|    5 | 10.50 | EEE  |   50 |
|    1 | 10.10 | AAA  |   10 |
|    2 | 10.20 | BBB  |   20 |
+------+-------+------+------+

1.9 部署Postgresql 就不说了

2.0 部署Seatunnel
官网
安装包

复制代码
tar -xzvf "apache-seatunnel-${version}-bin.tar.gz"

2.0.1 手动下载连接器,然后将其移动至connectors/目录下,如果是2.3.5之前则需要放入connectors/seatunnel目录下。
下载地址

2.0.2 您需要确保 jdbc 驱动 jar 包 已放置在目录 ${SEATUNNEL_HOME}/lib/ 中。

2.0.3 使用SeaTunnel 引擎快速开始

pg创建表:

复制代码
CREATE TABLE alarm_receive_record (
    id BIGINT PRIMARY KEY,
    device_id VARCHAR(50),
    alarm_time TIMESTAMP,
    content TEXT
);

pg追加数据:

复制代码
INSERT INTO alarm_receive_record (id, device_id, alarm_time, content)
VALUES 
    (3, 'D003', '2025-02-26 16:15:00', '通信中断'),
    (4, 'D004', '2025-02-26 17:20:00', '湿度超限'),
    (5, 'D005', '2025-02-26 17:20:00', '湿度超限2'),
(6, 'D006', '2025-02-26 17:20:00', '湿度超限6'),(7, 'D007', '2025-02-26 17:20:00', '湿度超限7'),(8, 'D008', '2025-02-26 17:20:00', '湿度超限8'),(9, 'D009', '2025-02-26 17:20:00', '湿度超限9'),(10, 'D0010', '2025-02-26 17:20:00', '湿度超限10')

doris手动创建表结构:

复制代码
CREATE TABLE testdb.alarm_receive_record (
    id BIGINT COMMENT "唯一ID",
    device_id VARCHAR(50) COMMENT "设备ID",
    alarm_time DATETIME COMMENT "告警时间",
    content STRING COMMENT "告警内容"
) ENGINE=OLAP
DUPLICATE KEY(id, device_id)  -- 选择 DUPLICATE 模型(全明细存储)
DISTRIBUTED BY HASH(device_id) BUCKETS 10  -- 按设备ID分桶
PROPERTIES (
    "replication_num" = "3",  -- 副本数(与集群配置一致)
    "storage_format" = "V2"    -- 存储格式
);

pg-doros.yaml

复制代码
env {
  parallelism = 4
  job.mode = "BATCH"
}
source{
    jdbc{
        url = "jdbc:postgresql://192.168.10.17:5432/aaa"
        driver = "org.postgresql.Driver"
        user = "test"
        password = "123123"
        query = "select * from alarm_receive_record"
    }
}

sink {
  Doris {
    fenodes = "192.168.20.174:8030"
    username = "root"
    password = "123123"
    database = "testdb"
    table = "alarm_receive_record"
    schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
    sink.label-prefix = "pg_to_doris"
    sink.enable-2pc = "true"
    column = ["id", "device_id", "alarm_time", "content"]
    doris.config {
      format = "json"
      read_json_by_line = "true"
    }
  }
}

2.0.4 启动同步任务,多次执行,会重复数据。

复制代码
cd "apache-seatunnel-${version}"
./bin/seatunnel.sh --config ./config/pg-doris.yaml  -m local

2.0.5 doris验证是否同步了。

相关推荐
数据智能老司机2 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机3 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
松果猿3 小时前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
无名之逆3 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s9123601013 小时前
rust 同时处理多个异步任务
java·数据库·rust
你觉得2053 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
数据智能老司机3 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
啊喜拔牙3 小时前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala
别惊鹊3 小时前
MapReduce工作原理
大数据·mapreduce
8K超高清3 小时前
中国8K摄像机:科技赋能文化传承新图景
大数据·人工智能·科技·物联网·智能硬件