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验证是否同步了。

相关推荐
武汉格发Gofartlic24 分钟前
FEKO许可证的安全与合规性
大数据·运维·安全
姬激薄1 小时前
HDFS概述
大数据·hadoop·hdfs
依年南台1 小时前
克隆虚拟机组成集群
大数据·hadoop
极小狐1 小时前
极狐GitLab 容器镜像仓库功能介绍
java·前端·数据库·npm·gitlab
极小狐1 小时前
如何构建容器镜像并将其推送到极狐GitLab容器镜像库?
开发语言·数据库·机器学习·gitlab·ruby
依年南台1 小时前
搭建大数据学习的平台
大数据·学习
阿四啊2 小时前
【Redis实战篇】分布式锁-Redisson
数据库·redis·分布式
_星辰大海乀2 小时前
数据库约束
java·数据结构·数据库·sql·链表
一只fish2 小时前
MySQL 8.0 OCP 1Z0-908 题目解析(1)
数据库·mysql
AI大模型顾潇2 小时前
[特殊字符] 本地部署DeepSeek大模型:安全加固与企业级集成方案
数据库·人工智能·安全·大模型·llm·微调·llama