为方便大家深入了解 RisingWave,本文整理了相关核心概念和术语,供参考。
1RisingWave 的关键概念
集群
一组相互连接的节点和服务,作为运行 RisingWave 实例的单一系统。
Compute 节点
RisingWave 中的 Compute 节点负责从上游系统获取数据、解析和运行 SQL 查询,并将数据传送到下游系统。
Compactor 节点
Compactor 节点负责处理数据存储和从对象存储中检索数据,还可进行数据压缩,优化存储效率。
片段(Fragments)
在 RisingWave 中,流式查询计划执行时会分成多个独立的片段,以便并行执行。每个片段都是一串 SQL 操作符。在 RisingWave 内部,该计划由并行处理器执行。片段之间的并行程度可以不同。
索引
数据库中的索引通常是在表的一列或多列上创建的,允许数据库管理系统(DBMS)从表中快速定位和检索所需的数据。这可以大大提高数据库查询的性能,尤其是对大型数据库而言。
物化视图
当视图表达式的结果存储在数据库系统中时,它们被称为物化视图。在 RisingWave 中,当系统中出现相关事件时,物化视图的结果就会更新。查询结果时,结果会立即返回,因为数据进入时计算已经完成。需要使用 CREATE MATERIALIZED VIEW
语句来创建物化视图。
Meta 节点
Meta 节点负责管理 Compute 节点和 Compactor 节点的元数据,并协调整个系统的操作符。
节点
节点是 IT 资源的逻辑集合,根据其类型处理特定的工作负载。RisingWave 有以下类型的节点:
Compute 节点 Compactor 节点 Meta 节点
并行
并行是指同时执行多个数据库操作符或查询以提高性能和效率的技术。它包括将数据库工作负载划分为较小的任务,并在多个处理器或机器上同时执行。在 RisingWave 中,可以设置并行流式作业,如表[1]、物化视图[2]和 Sink[3]。
Sink
Sink 是可以向其发送数据的外部目标。RisingWave 现在支持将数据导出到 MySQL、Kafka、Iceberg、PostgreSQL 等多种数据库和平台。想了解完整的支持列表及具体的导出流程,请查看数据导出概览[4]。将数据从 RisingWave 导出到 Sink 之前,需要使用 CREATE SINK
语句创建 Sink,以建立连接。
Source
Source 是 RisingWave 可以从中读取数据的资源。常见的 Source 包括 Apache Kafka 和 Apache Pulsar 等消息代理以及 MySQL 和 PostgreSQL 等数据库,想了解完整的支持列表及具体的读取流程,请查看数据导入概览[5]。可以使用 CREATE SOURCE
命令在 RisingWave 中创建 Source。
如果要持久化源数据,则应使用带有连接器设置的 CREATE TABLE
命令。无论数据是否在 RisingWave 中持久化,都可以创建物化视图来执行数据转换。
流处理
流处理是对实时变化的数据进行处理。换句话说,就是在数据产生或接收时直接对其进行计算。大多数数据都以连续的数据流形式产生:传感器事件、网站上的用户活动、金融交易等,所有这些数据都是随着时间产生的一系列事件。
流处理器
RisingWave 将其计算分布在“流处理器”的轻量级线程上,这些线程同时在 CPU 内核上运行。
RisingWave 通过将这些流处理器分散到各个内核,实现了并行计算,从而提高了性能、可扩展性和吞吐量。
流数据库
流数据库的广义定义是一种数据存储,旨在实时收集、处理和/或丰富数据流,通常在数据创建后立即使用。
流作业
流作业是指创建索引、物化视图、表、Sink 或带有连接器的 Source 的作业。
视图
视图是一种充当实际关系的虚拟关系。它不是数据库系统逻辑关系模型的一部分。视图的查询表达式存储在数据库系统中。非物化视图的结果不存储在数据库系统中,每次访问视图时都会计算其结果。
2术语表
Avro
Avro 是一个开源的数据序列化系统,可促进系统、编程语言和处理框架之间的数据交换。Avro 具有类似 JSON 的数据模型,但既可以表示为 JSON 格式,又可以表示为压缩二进制码。RisingWave 可以解码 Avro 数据。需要通过提供 Schema 位置或 Schema Registry URL(仅适用于 Kafka Topic)来指定 Schema。
连接
连接允许访问位于 VPC 外部的服务。AWS PrivateLink 可提供一种网络连接,用于在 VPC、专用网络和其他服务之间创建专用连接。在 RisingWave 中,CREATE CONNECTION
命令可在 RisingWave 和外部服务之间建立连接。然后,可以创建一个 Source 或 Sink 来接收或发送消息。
变更数据捕获(CDC)
变更数据捕获是指在数据库或源应用中数据发生变更时识别和捕获变更,然后将这些变更实时传送到下游流程、系统或数据湖的过程。RisingWave 支持从 Kafka Topic 摄取 Debezium JSON 或 Maxwell JSON 格式的 CDC 事件。
数据持久化
数据持久化是指数据在生成后仍然存在。数据库必须写入非易失性存储,才能被视为具有持久性。这种存储可以在没有电源的情况下保留数据。有关如何在 RisingWave 中持久化数据,请参阅数据持久化[6]。
Debezium
Debezium 是一个用于变更数据捕获(CDC)的开源分布式平台。它可将现有数据库中的变更数据转换为 Kafka Topic 形式的事件流。Debezium 可为变更日志提供统一的格式 Schema,并支持以 JSON 和 Apache Avro 格式序列化消息。
对象存储
对象存储或基于对象的存储是一种以无层次结构的方式存储数据的技术。对象存储中的数据以离散单元(对象)的形式存在于存储池中的同一层级。每个对象都有一个唯一的标识名称,应用可使用该名称检索数据。使用对象存储的好处包括大规模可扩展性和成本效益。
Protobuf
协议缓冲区(通常称为 Protobuf)是谷歌的语言中立、平台中立、可扩展的结构化数据序列化机制。它类似于 XML,但更小、更快、更简单。RisingWave 支持解码 Protobuf 数据。创建 Protobuf 格式的 Source 时,需要指定 Schema。有关要求的详细信息,请参阅 Protobuf 要求[7]。
psql
psql 是 PostgreSQL 和其他兼容 PostgreSQL 传输协议[8]的数据库(如 RisingWave)的基于终端的前端。使用 psql 可以交互式地键入查询,向 RisingWave 发送这些 Topic 查询,并查看查询结果。此外,psql 还提供了大量元命令和各种类似 shell 的功能,便于编写脚本和自动化多种任务。
序列化
在流处理中,序列化是将业务对象转换为字节的过程,以便于保存或传输。从字节流中重新创建数据结构或对象的反向过程称为反序列化。常见的数据序列化格式包括 JSON、Avro[9]、Protobuf(协议缓冲区)和 CSV。
表: https://zh-cn.risingwave.com/docs/current/sql-alter-table/#set-parallelism
[2]物化视图: https://zh-cn.risingwave.com/docs/current/sql-alter-materialized-view/#set-parallelism
[3]Sink: https://zh-cn.risingwave.com/docs/current/sql-alter-sink/#set-parallelism
[4]数据导出概览: https://docs.risingwave.com/docs/current/data-delivery/
[5]数据导入概览: https://docs.risingwave.com/docs/current/data-ingestion/
[6]数据持久化: https://zh-cn.risingwave.com/docs/current/data-persistence/
[7]Protobuf 要求: https://zh-cn.risingwave.com/docs/current/sql-create-source/#protobuf
[8]传输协议: https://zh-cn.risingwave.com/docs/current/key-concepts/#wire-protocol
[9]Avro: https://zh-cn.risingwave.com/docs/current/key-concepts/#wire-protocol
关于 RisingWave
往期推荐
技术内幕