Flink+Paimon+StarRocks(Doris)构建实时湖仓OLAP分析

目录

能力介绍

环境介绍

Quick Start

1. 流写Paimon

1.1 启动FlinkSQL

1.2 创建paimon catalog

1.3 创建paimon表 & datagen写入

2. Flink Batch读Paimon

3. StarRocks读Paimon外表

OLAP性能对比


内容概况

单机环境安装配置可以参考上一篇文章:Flink+Paimon+Hadoop+StarRocks(Doris)单机环境安装部署

        本文主要是基于单机/本地的大数据湖仓环境,测试FlinkSQL + Paimon + StarRocks/ Doris实现的实时(分钟级)数据入湖,并通过StarRocks/Doris外表查询Paimon秒级OLAP查询。

        文章还对「Flink Batch读Paimon」和「StarrRocks读Paimon」做了一些性能对比。

能力介绍

当前 StarRocks x Paimon 的能力主要包括:

  1. 支持各类存储系统,包括 HDFS 以及对象存储 S3/OSS/OSS-HDFS

  2. 支持 HMS 以及阿里云 DLF 元数据管理系统

  3. 支持 Paimon 的 Primary Key 和 Append Only 表类型查询

  4. 支持 Paimon 系统表的查询,常见例如 Read Optimized 表,snapshots 表等

  5. 支持 Paimon 表和其他类型数据湖格式的关联查询

  6. 支持 Paimon 表和 StarRocks 内表的关联查询

  7. 支持 Data Cache 加速查询

  8. 支持基于 Paimon 表构建物化视图实现透明加速,查询改写等

  9. 支持 Paimon 表开启 Delete Vector 加速查询

        对于 Primary Key 表类型,Paimon 社区对 Read Optimized 系统表做了完善的性能优化,可以与 Append Only 表一样充分利用 Native reader 的能力,得到直接查询 Paimon 数据的最佳性能。直接查询 Primary Key 表的情况下,若 Primary Key 表里包含没有做 Compaction 的数据,StarRocks 里会通过 JNI 调用 Java 读取这部分内容,性能会有一定的损耗。即使是这种情况,在我们收到用户反馈里,平均还是会有相对 Trino 达到3倍以上的性能提升。

环境介绍

组件版本
Flink1.17.2
Paimon0.8.2
StarRocks3.2.11

Quick Start

1. 流写Paimon

1.1 启动FlinkSQL

./bin/start-cluster.sh 
./bin/sql-client.sh

1.2 创建paimon catalog

CREATE CATALOG my_catalog WITH (
    'type'='paimon',
    'warehouse'='file:/Users/xxx/bigdata_env/paimon_path'
);

SHOW CATALOGS;

USE CATALOG my_catalog;

USE test_paimon_db;

1.3 创建paimon表 & datagen写入

CREATE TABLE IF NOT EXISTS paimon_tbl_partial_updates_test2 (
 uuid bigint,
 name VARCHAR(15),
 country VARCHAR(15),
 region VARCHAR(15),
 address VARCHAR(35),
 gender VARCHAR(5),
 company VARCHAR(25),
 job VARCHAR(25),
 age int,
 ts TIMESTAMP(3),
 dt VARCHAR(10), 
 PRIMARY KEY (dt, uuid) NOT ENFORCED 
) PARTITIONED BY (dt) 
 WITH (
    'merge-engine' = 'partial-update',
    'changelog-producer' = 'full-compaction', 
    'file.format' = 'orc', 
    'scan.mode' = 'compacted-full', 
    'bucket' = '2', 
    'sink.parallelism' = '2', 
    'sequence.field' = 'ts' 
);

show tables;

SET 'execution.runtime-mode' = 'streaming';  -- !

CREATE TEMPORARY TABLE IF NOT EXISTS source_a2 (
 uuid bigint PRIMARY KEY NOT ENFORCED,
 name VARCHAR(15),
 country VARCHAR(15),
 region VARCHAR(15),
 address VARCHAR(35),
 gender VARCHAR(5),
 company VARCHAR(25),
 job VARCHAR(25),
 age int,
 ts TIMESTAMP(3)
) WITH (
 'connector' = 'datagen', 
 'fields.uuid.kind'='sequence',
 'fields.uuid.start'='0', 
 'fields.uuid.end'='100000', 
 'rows-per-second' = '1' 
);

SET 'execution.checkpointing.interval' = '10 s';

insert into paimon_tbl_partial_updates_test2(uuid, name, country, region, address, gender, company, job, age, ts, dt) select uuid, name, country, region, address, gender, company, job, age, ts, date_format(ts,'yyyy-MM-dd') as dt from source_a2;

2. Flink Batch读Paimon

-- use tableau result mode
SET 'sql-client.execution.result-mode' = 'tableau';

-- switch to batch mode
RESET 'execution.checkpointing.interval';
SET 'execution.runtime-mode' = 'batch';

-- olap query the table
SELECT * FROM paimon_tbl_partial_updates_test2 WHERE dt='2024-10-17';

-- 
select name from paimon_tbl_partial_updates_test2 where dt='2024-10-17' and (country like '%aa%' or region like '%aa%');

在 localhost:8081 的 Flink-UI 可以看到历史执行情况:

3. StarRocks读Paimon外表

SR通过docker进行部署,需要先通过docker启动镜像容器。

# 挂载启动docker 镜像
docker run -v /Users/xxx/bigdata_env/docker_path/data:/home/zzz/data -p 9030:9030 -p 8030:8030 -p 8040:8040 -itd --name quickstart starrocks/allin1-ubuntu:3.2.11

# docker启动MySQL
docker exec -it quickstart \
mysql -P 9030 -h 127.0.0.1 -u root --prompt="StarRocks > "

由于容器内外的文件系统「不互通」,所以需要挂载或者copy文件夹到docker容器中去!!!

# cp外部文件到容器内
docker cp  ~/bigdata_env/paimon_path quickstart:/home/zzz/data/

通过SR(StarRocks)「外表」查询Paimon

-- 创建paimon catalog(一次性)
CREATE EXTERNAL CATALOG paimon_catalog
PROPERTIES
(
"type" = "paimon",
"paimon.catalog.type" = "filesystem",
"paimon.catalog.warehouse" = "file:/home/zzz/data/paimon_path/"
);

-- test 
SELECT * FROM paimon_catalog.test_paimon_db.word_count;

-- query
select name from paimon_catalog.test_paimon_db.paimon_tbl_partial_updates_test2 where dt='2024-10-17' and (country like '%aa%' or region like '%aa%');

OLAP性能对比

  • 在单机版,小数据量上,『SR+Paimon OLAP查询速度相比『FlinkBatch+Paimon』效率提升88%
  • 大数据量需要结合集群环境进一步测试。

测试数据量FlinkBatch+Paimon(ms)SR+Paimoon(ms)
300063550
50640
60050
51540
68740
70260
25000100090
67580
1000100
76890
980120
100090
1000001000110
1000100
917120
1000120
747140
1000300
总计147321740

后记:

关于PaimonDoris的技术资料,以下是整合的信息: Paimon是一个开源的数据框架,旨在提供高效的流批处理能力以及ACID事务的支持。它能够与多种计算引擎集成以实现复杂的数据分析工作负载。 Apache Doris 是一个现代化的分布式SQL数据库,专为实时分析而设计。其特点在于高性能、易用性以及强大的OLAP功能。当提到"Paimon Doris"时,通常是指这两个项目之间的协作或兼容性,尤其是在构建Lakehouse架构方面。 对于想要了解如何结合使用这两项技术的人来说,可以参考如下资源: - **官方文档**:访问官方网站获取最权威的产品说明和技术细节。 - **优快云 技术社区**:这里有关于Paimon的文章讨论了不同OLAP工具(例如Spark, StarRocks, Doris)与其配合使用的案例研究;还有专门针对Flink CDC将数据导入至数据中的实践经验分享。 - **掘金平台上的教程**:提供了详细的指导来帮助读者快速建立包含Hudi, Iceberg等在内的各种主流数据格式和支持系统的一体化解决方案,并特别提到了Apache Doris + Paimon组合的应用实例。 - **墨天轮网站**:探讨了SeaTunnel同其他大数据处理组件如Spark, Flink, Doris之间交互的可能性,这有助于理解整个生态系统内的互操作性问题。 - **阿里云论坛**:记录了一些实际应用过程中遇到的具体挑战及其解决办法,比如利用Flink CDC从关系型数据库向Paimon传输数据时可能碰到的各种错误提示及对应的修复措施。 为了更深入地探索这些主题,建议直接查阅上述来源提供的链接或者进一步搜索特定话题下的最新进展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值