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

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

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

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

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

  • 业务数据库的 CDC 抽取: 如今主流的 MySQL、Postgres、MongoDB 等数据库同步均已被 RisingWaveFlinkCDC 等开源工具原生支持。
  • 实时写入到数仓中: 流行的数据仓库系统,如 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

相关推荐
方二华44 分钟前
5 mysql源码中B+树的构建
数据库·mysql·1024程序员节
望获linux3 小时前
【Linux基础知识系列:第一百五十九篇】磁盘健康监测:smartctl
linux·前端·数据库·chrome·python·操作系统·软件
西部风情3 小时前
聊聊并发、在线、TPS
android·java·数据库
CoderJia程序员甲4 小时前
GitHub 热榜项目 - 日榜(2025-10-23)
ai·开源·大模型·github·ai教程
FlagOS智算系统软件栈5 小时前
与创新者同频!与FlagOS共赴开源之约
人工智能·ai·开源
清风6666666 小时前
基于单片机的水塔液位检测与智能调节报警系统设计
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
gplitems1237 小时前
Technox – IT Solutions & Services WordPress Theme: A Practical
linux·服务器·数据库
不剪发的Tony老师7 小时前
MySQL 9.5创新版发布,有哪些新功能?
数据库·mysql
布朗克1688 小时前
MySQL 及 SQL 注入详细说明
数据库·sql·mysql·1024程序员节
武子康8 小时前
Java-154 深入浅出 MongoDB 用Java访问 MongoDB 数据库 从环境搭建到CRUD完整示例
java·数据库·分布式·sql·mongodb·性能优化·nosql