实践|基于 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

相关推荐
杜子不疼.7 分钟前
《Python学习之文件操作:从入门到精通》
数据库·python·学习
淡酒交魂21 分钟前
「Flink」业务搭建方法总结
大数据·数据挖掘·数据分析
TDengine (老段)30 分钟前
TDengine IDMP 高级功能(4. 元素引用)
大数据·数据库·人工智能·物联网·数据分析·时序数据库·tdengine
DashVector1 小时前
如何通过Java SDK分组检索Doc
java·数据库·面试
Olrookie1 小时前
XXL-JOB GLUE模式动态数据源实践:Spring AOP + MyBatis 解耦多库查询
java·数据库·spring boot
苏婳6661 小时前
【最新版】怎么下载mysqlclient并成功安装?
数据库·python·mysql
猫头虎2 小时前
猫头虎AI分享|一款Coze、Dify类开源AI应用超级智能体Agent快速构建工具:FastbuildAI
人工智能·开源·github·aigc·ai编程·ai写作·ai-native
Tapdata3 小时前
《实时分析市场报告 2025》上线 | 从批处理到实时洞察,2025 年全球实时分析市场全景解读
数据库
海梨花3 小时前
【从零开始学习Redis】项目实战-黑马点评D2
java·数据库·redis·后端·缓存
代码的余温5 小时前
SQL性能优化全攻略
数据库·mysql·性能优化