产品发版|StarRocks 2.4 新版本特性介绍

本文发表于: &{ new Date(1666540800000).toLocaleDateString() }

作者:StarRocks 社区

各位 StarRocks 的新老用户:

1024 程序员节快乐!值此大日子,StarRocks 社区来上道硬菜!StarRocks 近期发布了 2.4 版本,核心功能有:多表物化视图,无状态的 Compute Node(CN)以及 StarRocks Kubernetes (K8s) Operator,catalog 支持 Apache Hudi(以下简称 Hudi) 和 Apache Iceberg(以下简称 Iceberg),Impersonate,FQDN 支持等。

欢迎体验新版本功能,若喜欢我们的项目,大家可以在 GitHub 上 Star 一下✨ 体验地址:https://github.com/StarRocks/starrocks

以下是具体介绍,欢迎您升级使用、多多反馈!

#01 StarRocks 2.4 版本介绍

StarRocks 是新一代极速全场景 MPP 数据库,致力于让用户无需经过复杂的预处理,就可以支持多种数据分析场景的极速分析。
 

在 2.4 版本中,StarRocks 补齐了不少功能:添加了 Hudi  和 Iceberg 的 catalog 支持,让您可以在不创建外表的情况下直接访问查询 Hudi 和 Iceberg 里的数据;专门为实时 OLAP 分析而生的主键索引模型(primary key model)也得到了补强,主键索引磁盘持久化(persistent primary key index)模式新增 VARCHAR 数据类型支持,和常驻内存模式支持数据类型达成一致;支持了多表物化视图,为您多表 JOIN 的查询进一步加速。

同时,StarRocks 也在这个版本中做了大胆的尝试:为了在数据湖查询峰谷的情况下节约资源,发布了无状态的计算节点(CN)和StarRocks K8s Operator,您可以在 K8s 集群里部署和管理无状态的 StarRocks CN 并实现 CN 的自动横向扩缩容;为了高并发等多表高负载查询场景下简化数据建模,发布了异步更新的多表物化视图。

#02 StarRocks 2.4 新增功能详解

1 多表物化视图

为了进一步提升多表查询性能,用户经常需要在 StarRocks 上游或者内部做 JOIN 预计算并落盘,为数据管道(data pipeline)带来更多依赖(dependencies)的同时,中间表的维护也带来额外的调度运维压力。

在 2.4 版本中,StarRocks 支持了异步刷新的多表物化视图,在无需外部调度的情况下,StarRocks 内部基于 insert overwrite 语义自动维护异步物化视图表:由此摆脱提前打宽的数据建模方式,提升数据建模和查询的灵活性的同时,简化数据预处理管道(data preprocessing pipeline)的复杂性。

StarRocks V2.4 是对多表物化视图的首次尝试。在后续版本里,StarRocks 会继续对多表物化视图进行补强,包括支持增量更新、查询自动改写等等。尽情期待!

2 弹性数据湖分析

最有效的节约发生在系统闲置的时候:在即席查询(ad-hoc query)主导的场景下(例如数据湖分析),时常有计算资源被占用但是没有负载的情况发生,导致计算资源的浪费。这时候,我们需要一种可以随着负载一起快速弹性伸缩的架构。2.4 版本是 StarRocks 首次在无状态弹性伸缩上的尝试。

StarRocks 计算节点 (Compute Node)

在 2.4 版本,StarRocks 在 FE 、BE 基础上,提供了 Compute Node(CN)。CN 是一种支持基于 K8s 的可容器化部署的无状态计算服务,自身不维护数据,避免扩缩容过程中数据重分布的代价,实现无状态弹性伸缩。CN 在整个 SQL 生命周期当中承担了数据 shuffle 后的计算以及湖上数据的 Scan 等计算过程,高效支撑湖上查询负载。

StarRocks Operator

Operator 是 K8s 提供的一种扩展软件,允许您通过定制资源来管理应用服务和组件。StarRocks Operator 定制 StarRocks CN 的资源并可将其部署到您的 K8s 环境内,由此解放复杂的运维管理。可以通过 K8s 的 Pod 水平自动扩缩 (HPA) 能力实现基于负载的计算资源自动弹性扩缩容,做到自动在闲置时释放资源,负载时横向扩充资源,在计算峰谷的场景(例如数据湖分析)下,节约资源,降低成本。

3 支持 Hudi 和 Iceberg Catalog

2.4 版本中,external catalog 支持了 Hudi 和 Iceberg 数据源,您可以在不创建外表的情况下直接访问 Hudi 和 Iceberg 的数据,从而更好地基于 StarRocks 构建湖仓一体化的分析体验。

4 Tablet 支持多线程并行 Scan

在此前版本,一个 Tablet 只能被一个线程扫描(Scan),因而需要在一个磁盘里配置多个 Tablet 以达到最优的 Scan 性能。在 2.4 版本中,BE 支持多线程 Scan 一个 Tablet,大幅降低了 Scan 性能对 Tablet 数量的依赖,设置同磁盘数量相等的 Tablet 即可达到最优的 Scan 性能,从而也简化了 Tablet 数量的配置。

5 Fully Qualified Domain Name 支持

在数据库运维中,如果用 IP 作为节点的唯一标识,会出现因为 IP 变动而导致服务不可用的问题。在 2.4 版本中,支持了 Fully qualified domain name(FQDN)。您可以用域名或结合主机名与端口的方式作为 FE 或 BE 节点的唯一标识,有效避免因 IP 变更导致无法访问的问题。

6 其他功能与优化

  • 支持通过 INSERT OVERWRITE 语句批量写入并覆盖数据。
  • Outer Join 支持通过 `<`、`<=`、`>`、`>=`、`<>` 等比较操作符对多表进行非等值关联。
  • 支持查询 CSV 格式 Apache Hive™ 表中的 ARRAY 列。
  • 支持通过 DESC 语句查看外部数据的表结构。
  • 支持通过 GRANT 或 REVOKE 语句授予或撤销用户特定角色或 IMPERSONATE 权限,并支持通过 EXECUTE AS 语句使用 IMPERSONATE 权限执行当前会话。
  • flink-connector-starrocks 支持主键模型 Partial Update。
  • 主键模型支持持久化 VARCHAR 类型主键索引。
    • 自 2.4.0 版本起,主键模型的主键索引磁盘持久化模式和常驻内存模式支持相同的数据类型。
  • 优化外表查询性能。
    • 支持查询 Parquet 格式文件时延迟物化,提升小范围过滤场景下的数据湖查询性能。
    • 查询数据湖时,支持通过合并小型 I/O 以降低存储系统的访问延迟,进而提升外表查询性能。
  • 优化窗口函数性能。
  • Cross Join 支持谓词下推,性能提升。
  • 统计信息支持直方图,并进一步完善全量统计信息采集。
  • 支持 Tablet 自适应多线程 Scan,降低 Scan 性能对同磁盘 Tablet 数量的依赖,从而可以简化对分桶数量的设定。
  • 去除数据导入主键模型时的 final_merge 操作,主键模型大数据量单批次导入性能提升至两倍。
  • 函数相关:
    • 新增 array_contains_all 函数,用于判断特定数组是否为另一数组的子集。
    • 新增 percentile_cont 函数,用于通过线性插值法计算百分位数。
    • count distinct 支持多个字段,可计算多字段组合去重后的结果数目。
    • 窗口函数 max 和 min 支持滑动窗口。
    • 优化函数 window_funnel 性能。
  • 行为变更
    • 默认开启 Page Cache,Cache Size 为系统内存大小的 20% 。
  • 其他
    • 现已正式支持资源隔离功能。
    • 现已正式支持 JSON 数据类型及相关函数。

在这个版本中,135 位贡献者共提交 1751 个 Commits,感谢他们:

Astralidea,  gengjun-git,  banmoy,  amber-create,  EsoragotoSpirit,  sevev,  packy92,  ZiheLiu,  lixiaoer666,  evelynzhaojie,  femiiii,  stdpain,  zaorangyang,  mofeiatwork,  ABingHuang,  meegoo,  sduzh,  decster,  xiaoyong-z,  liuyehcf,  hellolilyliuyi,  Linkerist,  HangyuanLiu,  padmejin,  nshangyiming,  GavinMar,  dirtysalt,  rickif,  Youngwb,  Smith-Cruise,  mxdzs0612,  Seaven,  mergify[bot],  waittttting,  silverbullet233,  zombee0,  trueeyu,  hongli-my,  chaoyli,  choury,  caneGuy,  Pslydhh,  adzfolc,  satanson,  smartlxh,  blackstar-baba,  zddr,  QingdongZeng3,  stephen-shelby,  feihengye,  dulong41,  wanpengfei-git,  wyb,  ucasfl,  predator4ann,  shshenhua,  RowenWoo,  abc982627271,  harveyyue,  TszKitLo40,  starrocks-xupeng,  kevincai,  leoyy0316,  kangkaisen,  DorianZheng,  xuzifu666,  mchades,  wanghuan2054,  xlwh,  wuleistarrocks,  hiliuxg,  liukun4515,  cbcbq,  imay,  huangfeng1993,  zhuxt2015,  TBCCC,  jaogoy,  wuxueyang96,  Crystal-LiuJing,  samredai,  miomiocat,  fzhedu,  aaawuanjun,  rubiesvelt,  harui7890,  kateshaowanjou,  only2yangcao,  even986025158,  goodqiang,  Johnsonginati,  minchowang,  tomscut,  wangsimo0,  changli6,  screnwei,  zhongyuankai,  dreamay,  chen9t,  sym-liuyang,  MonsterChenzhuo,  titianqx,  wangxiaobaidu11,  happut,  wangruin,  Zhangruichao,  shyamrox,  itweixiang,  zdsg1024,  ylcq,  laotan332,  zbtzbtzbt,  ss892714028,  long2ice,  etr2460,  liuqian1990,  dufeng1010,  mklzl,  chenyjsr,  DeepThinker666,  johndinh391,  karan-kap00r,  creatstar,  Gabriel39,  Ielihs,  hffariel,  SaintBacchus,  bigdata-kuxingseng,  staman96,  Gri-ffin,  jsinwell,  DebayanSen96,  RishiKumarRay,  Ccuurryy,  wuqiao