实践|基于 RisingWave 和 StarRocks 的实时打宽+分析解决方案

所谓的"打宽",就是将明细表和可能来自多个数据源的多张维表进行关联,汇总成一个大宽表,便于后续处理分析的过程。

时至今日,打宽 + 实时分析仍是流处理领域最常见的场景,然而,这个场景依然有许多亟待解决的痛点。

在深入这些痛点之前,我们先回顾一下业内已经解决了什么:

1. 过去基于 StarRocks 的打宽方案

  • 业务数据库的 CDC 抽取: 如今主流的 MySQL、Postgres、MongoDB 等数据库同步均已被 RisingWave、FlinkCDC 等开源工具原生支持。
  • 实时写入到数仓中: 流行的数据仓库系统,如 StarRocks,其产品已支持相对高效的写入能力:
    1. 主键表: 这一表类型在 StarRocks 存储内部维护了主键索引,可以高效地处理更新和删除。RisingWave 写入 StarRocks 默认就需要这一表类型。
    2. 部分列更新: 非常适合大宽表下,每次更新只有少部分列(一般低于30%)被变更的场景。
    3. StreamLoad: StarRocks 支持通过 HTTP 进行数据批量写入,实测下来写入吞吐能满足绝大多数场景需求。
  • 小状态的数据清洗和打宽: 许多开源或商业的流处理软件都提供了标准 SQL支持,这使得数据清洗时不需要担心表达能力的缺失。

2. 大状态的无奈

但需要注意的是,不论是 FlinkSQL 还是 Materialize,在超大状态维护上都或多或少地会遇到一些挑战,用户需要在复杂的内存磁盘调优与牺牲状态大小这两害之间选其轻。例如 FlinkSQL 就提供了许多减少状态的技巧,包括但不限于时间窗口+Watermark,Lookup Join,状态清理(TTL)等功能,而同时用户也不得不去学习大状态下 Checkpoint 的调优方式。

但如果手里钞票充足的话,还有一种选择,就是采购单台数十万成本的大规格服务器。

回到我们最初的讨论,即使基本的 ETL(即 CDC → 数据清洗 → 数仓实时写入) 已被解决,行业内仍然有许多亟待解决的痛点:

  • 复杂流处理逻辑的大状态维护
  • 如何长时间地(例如数月)保留中间状态
  • 如何基于大宽表做实时物化视图

3. 实时打宽的最后一公里

相信有深入过以上问题的朋友都能意识到,这其中所缺乏的恰恰是一个面向流计算的大状态存储:

  • 它的存储成本必须低,不常访问的数据应当被放在相对廉价的存储上,例如 HDFS 或 S3。
  • 它应该能够高效地处理流 Join 的频繁更新。
  • 它应该可查询,从而能在一些查询固定的监控场景里,直接基于流计算结果构建实时指标视图。
  • 它应该能够迅速地从故障中恢复。

RisingWave 旨在提供的就是这样的能力。

在实时打宽这一场景里,RisingWave 能够在较低的机器成本下,利用存算分离的能力,无需调优技巧,来支撑一个过去难以维护的 Join 链路。

上图引用自 RisingWave 用户案例 "视源股份(CVTE)IT 流计算应用历程",里面提到即使是 13 个表的 Join(如今已有数十个表的 Join),RisingWave 依然能够游刃有余地处理。

4. 完善的实时分析技术栈

随着 RisingWave 的打宽能力在许多用户场景里逐步被验证,我们也更多地将精力投入到对这一场景的全方面打磨。

在刚刚发布的 1.7 版本,我们优化了对 StarRocks 的写入,使得整个过程更加丝滑。

除了打宽,用户还可以将 RisingWave 视作一个数仓的实时缓存。在实时性要求低的场景,用户可以基于 StarRocks 完成离线分析,而当实时性无法满足的时候,用户就可以基于 RisingWave 的大宽表开发物化视图。在这套技术栈里,用户依照具体情况选择合适的技术即可。

除了通过 StarRocks Sink 写入外,RisingWave 也可以被用作 StarRocks 的外表,实现离线和在线的查询入口统一。

ini 复制代码
CREATE EXTERNAL RESOURCE rw_jdbc
PROPERTIES (
    "type"="jdbc",
    "user"="postgres",
    "password"="",
    "jdbc_uri"="jdbc:postgresql://risingwave-standalone:4566/dev",
    "driver_url"="https://repo1.maven.org/maven2/org/postgresql/postgresql/42.3.3/postgresql-42.3.3.jar",
    "driver_class"="org.postgresql.Driver"
);

CREATE EXTERNAL TABLE users (
    id BIGINT,
    description VARCHAR(255),
    name TEXT,
    created_at DATETIME
) ENGINE=jdbc 
properties (
    "resource"="rw_jdbc",
    "table"="users"
);

5. 未来展望

即使大状态的问题解决了,我们仍然需要面对 Schema change 的挑战。上游 MySQL 表加列了,下游的 StarRocks 是否能同步加列?RisingWave 自身的表是否也能同步加列?

我们看到有些行业实践能够自动捕获上游的 DDL,同时对 StarRocks 也进行加列。未来我们或许也会提供类似的能力。目前而言,RisingWave 提供了手动的加减列功能,我们仍然在围绕这一能力不断加强。

关于 RisingWave

RisingWave 是一款分布式 SQL 流处理数据库,旨在帮助用户降低实时应用的的开发成本。作为专为云上分布式流处理而设计的系统,RisingWave 为用户提供了与 PostgreSQL 类似的使用体验,并且具备比 Flink 高出 10 倍的性能以及更低的成本。

🧑‍💻想要了解和探索 RisingWave,欢迎浏览我们的官网:

risingwave.com/

🔧如果你还不知道如何上手 RisingWave,请体验中文入门教程:www.risingwavetutorial.com/

💻想要更深入地理解并使用 RisingWave,请阅读中文用户文档:zh-cn.risingwave.com/docs

相关推荐
Hello.Reader2 小时前
一个开源项目,让 AI 做逆向不再靠猜reverse-skill 架构解析与本地实战
人工智能·架构·开源
wespaul2 小时前
VeapAI 自然语言操作实战|第 05 篇:向量与召回——从知识条目到可检索资产
大数据·数据库·人工智能·milvus
一只鹿鹿鹿8 小时前
政务外网整体设计方案(PPT)
大数据·数据库·web安全·系统安全·流程图·政务
2603_965148118 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
LiuPig刘皮哥8 小时前
2026年开源3D陪玩对比:xiaoke.ai、AIRI、Open-LLM-VTuber、Amica 有什么、没有什么
人工智能·3d·开源
AI砖家8 小时前
安全进入 Agent Loop:2027 年 Coding Agent 的决胜点
数据库·安全·codex·vibecoding
Luminbox紫创测控8 小时前
车载LiDAR强光测试的实验设计方法与数据分析
人工智能·数据挖掘·数据分析·车载系统·安全性测试·太阳光模拟器
wangqiaowq8 小时前
SQL server C盘空间占满的处理
数据库·sql
文人sec8 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
数字新视界8 小时前
机房动环监控提升运维效率
大数据·服务器·数据库·动环监控系统·动力与环境监控系统