StarRocks 部署 - 极速全场景MPP数据库 大数据 docker mysql starrocks flink spark


https://hub.docker.com/r/starrocks/allin1-ubuntu

https://github.com/StarRocks/starrocks

https://docs.starrocks.io/zh-cn/latest/release_notes/release-3.1


# StarRocks 单容器部署 - 极速全场景MPP数据库

https://abc.htmltoo.com/thread-46635.htm

# StarRocks 集群部署 - 极速全场景MPP数据库

https://abc.htmltoo.com/thread-46636.htm


# 部署 StarRocks 存算一体集群(BE 同时做数据存储和计算)

https://www.starrocks.io/download/community

cd /opt

wget  https://releases.starrocks.io/starrocks/StarRocks-3.1.2.tar.gz

tar -xzvf StarRocks-3.1.2.tar.gz

1. 启动 Leader FE 节点

-在 FE 实例上执行

# 创建的元数据目录。

mkdir -p /data/starrocks/fe

vim /opt/StarRocks-3.1.2/fe/conf/fe.conf

# 将 <meta_dir> 替换为您已创建的元数据目录。
meta_dir = /data/starrocks/fe
...
http_port = aaaa        # 默认值:8030
rpc_port = bbbb         # 默认值:9020
query_port = cccc       # 默认值:9030
edit_log_port = dddd    # 默认值:9010
...
如需为集群启用 IP 地址访问,您必须在配置文件中添加配置项 priority_networks,为 FE 节点分配一个专有的 IP 地址(CIDR格式)
priority_networks = x.x.x.x/x
将 <path_to_JDK> 替换为所选 JDK 的安装路径。
JAVA_HOME = <path_to_JDK>
...

---启动 FE 节点

/opt/StarRocks-3.1.2/fe/bin/start_fe.sh --daemon

2. 启动 BE 服务

在一个 StarRocks 集群中部署并添加至少 3 个 BE 节点后,这些节点将自动形成一个 BE 高可用集群

vim    /opt/StarRocks-3.1.2/be/conf/be.conf

在配置项 storage_root_path 中指定数据存储路径。
# 将 <storage_root_path> 替换为您创建的数据存储路径。
storage_root_path = /data/starrocks/be
...
http_port = aaaa        # 默认值:8030
rpc_port = bbbb         # 默认值:9020
query_port = cccc       # 默认值:9030
edit_log_port = dddd    # 默认值:9010
...
如需为集群启用 IP 地址访问,您必须在配置文件中添加配置项 priority_networks,为 FE 节点分配一个专有的 IP 地址(CIDR格式)
priority_networks = x.x.x.x/x
将 <path_to_JDK> 替换为所选 JDK 的安装路径。
JAVA_HOME = <path_to_JDK>
...

---启动 BE 节点。

 /opt/StarRocks-3.1.2/be/bin/start_be.sh --daemon

3.(可选)启动 CN 服务

Compute Node(CN)是一种无状态的计算服务,本身不存储数据。您可以通过添加 CN 节点为查询提供额外的计算资源。您可以使用 BE 部署文件部署 CN 节点。CN 节点自 v2.4 版本起支持。

vim    /opt/StarRocks-3.1.2/be/conf/cn.conf

thrift_port = vvvv               # 默认值:9060
be_http_port = xxxx              # 默认值:8040
heartbeat_service_port = yyyy    # 默认值:9050
brpc_port = zzzz                 # 默认值:8060
...
如需为集群启用 IP 地址访问,您必须在配置文件中添加配置项 priority_networks,为 FE 节点分配一个专有的 IP 地址(CIDR格式)
priority_networks = x.x.x.x/x
将 <path_to_JDK> 替换为所选 JDK 的安装路径。
JAVA_HOME = <path_to_JDK>
...

启动 CN 节点。

./be/bin/start_cn.sh --daemon

4. 搭建集群

查看 Leader FE 节点状态。

SHOW PROC '/frontends'\G

-添加 BE 节点至集群

-将 <be_address> 替换为 BE 节点的 IP 地址(priority_networks)或 FQDN,

-并将 <heartbeat_service_port>(默认:9050)替换为您在 be.conf 中指定的 heartbeat_service_port。

ALTER SYSTEM ADD BACKEND "<be_address>:<heartbeat_service_port>", "<be2_address>:<heartbeat_service_port>", "<be3_address>:<heartbeat_service_port>";

-查看 BE 节点状态。

SHOW PROC '/backends'\G

如果字段 Alive 为 true,说明该 BE 节点正常启动并加入集群。

-(可选)添加 CN 节点至集群。

-- 将 <cn_address> 替换为 CN 节点的 IP 地址(priority_networks)或 FQDN,

-- 并将 <heartbeat_service_port>(默认:9050)替换为您在 cn.conf 中指定的 heartbeat_service_port。

ALTER SYSTEM ADD COMPUTE NODE "<cn_address>:<heartbeat_service_port>", "<cn2_address>:<heartbeat_service_port>", "<cn3_address>:<heartbeat_service_port>";

-(可选)执行以下 SQL 查看 CN 节点状态。

SHOW PROC '/compute_nodes'\G

-如果执行查询时需要使用 CN 节点扩展算力,则需要设置系统变量

SET prefer_compute_node = true;
SET use_compute_nodes = -1;

5. 第五步:(可选)部署高可用 FE 集群

高可用的 FE 集群需要在 StarRocks 集群中部署至少三个 Follower FE 节点。如需部署高可用的 FE 集群,您需要额外再启动两个新的 FE 节点。您只能通过一条 SQL 添加一个 Follower FE 节点。

执行以下 SQL 将额外的 FE 节点添加至集群。

-- 将 <new_fe_address> 替换为您需要添加的新 FE 节点的 IP 地址(priority_networks)或 FQDN,

-- 并将 <edit_log_port>(默认:9010)替换为您在新 FE 节点的 fe.conf 中指定的 edit_log_port。

ALTER SYSTEM ADD FOLLOWER "<new_fe_address>:<edit_log_port>";

--在新的 FE 示例上启动终端,创建元数据存储路径

 fe/conf/fe.conf

    如已为集群启用 IP 地址访问,请运行以下命令启动 FE 节点:

# 将 <helper_fe_ip> 替换为 Leader FE 节点的 IP 地址(priority_networks),

# 并将 <helper_edit_log_port>(默认:9010)替换为 Leader FE 节点的 edit_log_port。

./fe/bin/start_fe.sh --helper <helper_fe_ip>:<helper_edit_log_port> --daemon

您只需在第一次启动节点时指定参数 --helper

启动所有 Follower FE 节点后,通过 MySQL 客户端查看 FE 节点状态。

SHOW PROC '/frontends'\G

    如果字段 Alive 为 true,说明该 FE 节点正常启动并加入集群。

    如果字段 Role 为 FOLLOWER,说明该 FE 节点有资格被选为 Leader FE 节点。

    如果字段 Role 为 LEADER,说明该 FE 节点为 Leader FE 节点。

6. 停止 StarRocks 集群

停止 FE 节点。
./fe/bin/stop_fe.sh --daemon
停止 BE 节点。
./be/bin/stop_be.sh --daemon
停止 CN 节点。
./be/bin/stop_cn.sh --daemon

7. 升级 StarRocks

您需要先升级 BE 和 CN,然后升级 FE

---通用兼容性配置
升级前,请关闭 Tablet Clone。
ADMIN SET FRONTEND CONFIG ("max_scheduling_tablets" = "0");
ADMIN SET FRONTEND CONFIG ("max_balancing_tablets" = "0");
ADMIN SET FRONTEND CONFIG ("disable_balance"="true");
ADMIN SET FRONTEND CONFIG ("disable_colocate_balance"="true");
完成升级,并且所有 BE 节点状态变为 Alive 后,您可以重新开启 Tablet Clone。
ADMIN SET FRONTEND CONFIG ("max_scheduling_tablets" = "2000");
ADMIN SET FRONTEND CONFIG ("max_balancing_tablets" = "100");
ADMIN SET FRONTEND CONFIG ("disable_balance"="false");
ADMIN SET FRONTEND CONFIG ("disable_colocate_balance"="false");
---升级 BE
./bin/stop_be.sh
mv lib lib.bak 
mv bin bin.bak
cp -r /tmp/StarRocks-x.x.x/be/lib  .
cp -r /tmp/StarRocks-x.x.x/be/bin  .
sh bin/start_be.sh --daemon
-查看节点是否启动成功。
ps aux | grep starrocks_be
---升级 CN
./bin/stop_cn.sh --graceful
mv lib lib.bak 
mv bin bin.bak
cp -r /tmp/StarRocks-x.x.x/be/lib  .
cp -r /tmp/StarRocks-x.x.x/be/bin  .
sh bin/start_cn.sh --daemon
-节点是否启动成功。
ps aux | grep starrocks_be
---升级 FE
升级Follower FE节点,最后升级 Leader FE 节点
./bin/stop_fe.sh
mv lib lib.bak 
mv bin bin.bak
mv spark-dpp spark-dpp.bak
cp -r /tmp/StarRocks-x.x.x/fe/lib  .   
cp -r /tmp/StarRocks-x.x.x/fe/bin  .
cp -r /tmp/StarRocks-x.x.x/fe/spark-dpp  
sh bin/start_fe.sh --daemon
---查看节点是否启动成功。
ps aux | grep StarRocksFE


# 集群部署

1. 规划 StarRocks 集群

1.1 节点数量

StarRocks 主要由两种类型的组件组成:FE 节点和 BE 节点。每个节点必须单独部署在物理机或虚拟机上。

1.2 FE 节点数量

FE 节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。

对于 StarRocks 生产集群,建议您至少部署三个 Follower FE 节点,以防止单点故障。

StarRocks 通过 BDB JE 协议跨 FE 节点管理元数据。StarRocks 从所有 Follower FE 节点中选出一个 Leader FE 节点。只有 Leader FE 节点可以写入元数据,其他 Follower FE 节点只能根据 Leader FE 节点的日志更新元数据。如果 Leader FE 节点掉线,只要超过半数的 Follower FE 节点存活,StarRocks 就会重新选举出一个新的 Leader FE 节点。

如果您的应用程序会产生高并发查询请求,您可以在集群中添加 Observer FE 节点。Observer FE 节点只负责处理查询请求,不会参与 Leader FE 节点的选举。

1.3 BE 节点数量

BE 节点负责数据存储和 SQL 执行。

对于 StarRocks 生产集群,建议您至少部署三个 BE 节点,这些节点会自动形成一个 BE 高可用集群,避免由于发生单点故障而影响数据可靠性和服务可用性。

您可以通过增加 BE 节点的数量来实现查询的高并发。

1.4 CN 节点数量

CN 节点是 StarRocks 的可选组件,仅负责 SQL 执行。

您可以通过增加 CN 节点数量以弹性扩展计算资源,而无需改变集群中的数据分布。

1.5 CPU 和内存

通常,FE 服务不会消耗大量的 CPU 和内存资源。建议您为每个 FE 节点分配 8 个 CPU 内核和 16 GB RAM。

与 FE 服务不同,如果您的应用程序需要在大型数据集上处理高度并发或复杂的查询,BE 服务可能会使用大量 CPU 和内存资源。因此,建议您为每个 BE 节点分配 16 个 CPU 内核和 64 GB RAM。

2. 检查环境配置

https://docs.starrocks.io/zh-cn/latest/deployment/environment_configurations

3. 部署使用 StarRocks 存算分离集群

在存算分离的模式下,StarRocks 将数据存储在兼容 S3 协议的对象存储(例如 AWS S3、OSS 以及 MinIO)或 HDFS 中,而本地盘作为热数据缓存,用以加速查询。通过存储计算分离架构,您可以降低存储成本并且优化资源隔离。除此之外,集群的弹性扩展能力也得以加强。在查询命中缓存的情况下,存算分离集群的查询性能与存算一体集群性能一致。

相对存算一体架构,StarRocks 的存储计算分离架构提供以下优势:

    廉价且可无缝扩展的存储。

    弹性可扩展的计算能力。由于数据不再存储在 BE 节点中,因此集群无需进行跨节点数据迁移或 Shuffle 即可完成扩缩容。

    热数据的本地磁盘缓存,用以提高查询性能。

    可选异步导入数据至对象存储,提高导入效率。

3.1 配置存算分离集群 FE 节点

在启动 FE 之前,在 FE 配置文件 fe.conf 中添加以下配置项:

配置项描述
run_modeStarRocks 集群的运行模式。有效值:shared_datashared_nothing (默认)。shared_data 表示在存算分离模式下运行 StarRocks。shared_nothing 表示在存算一体模式下运行 StarRocks。
注意
StarRocks 集群不支持存算分离和存算一体模式混合部署。
请勿在集群部署完成后更改 run_mode,否则将导致集群无法再次启动。不支持从存算一体集群转换为存算分离集群,反之亦然。
cloud_native_meta_port云原生元数据服务监听端口。默认值:6090
enable_load_volume_from_conf是否允许 StarRocks 使用 FE 配置文件中指定的存储相关属性创建默认存储卷。有效值:true(默认)和 false。自 v3.1.0 起支持。
  • 如果您在创建新的存算分离集群时指定此项为 true,StarRocks 将使用 FE 配置文件中存储相关属性创建内置存储卷 builtin_storage_volume,并将其设置为默认存储卷。但如果您没有指定存储相关的属性,StarRocks 将无法启动。
  • 如果您在创建新的存算分离集群时指定此项为 false,StarRocks 将直接启动,不会创建内置存储卷。在 StarRocks 中创建任何对象之前,您必须手动创建一个存储卷并将其设置为默认存储卷。详细信息请参见创建默认存储卷
注意
建议您在升级现有的 v3.0 存算分离集群时,保留此项的默认配置 true。如果将此项修改为 false,升级前创建的数据库和表将变为只读,您无法向其中导入数据。
cloud_native_storage_type您使用的存储类型。在存算分离模式下,StarRocks 支持将数据存储在 HDFS 、Azure Blob(自 v3.1.1 起支持)、以及兼容 S3 协议的对象存储中(例如 AWS S3、Google GCP、阿里云 OSS 以及 MinIO)。有效值:S3(默认)、AZBLOBHDFS。如果您将此项指定为 S3,则必须添加以 aws_s3 为前缀的配置项。如果您将此项指定为 AZBLOB,则必须添加以 azure_blob 为前缀的配置项。如果将此项指定为 HDFS,则只需指定 cloud_native_hdfs_url
cloud_native_hdfs_urlHDFS 存储的 URL,例如 hdfs://127.0.0.1:9000/user/xxx/starrocks/
aws_s3_path用于存储数据的 S3 存储空间路径,由 S3 存储桶的名称及其下的子路径(如有)组成,如 testbucket/subpath
aws_s3_region需访问的 S3 存储空间的地区,如 us-west-2
aws_s3_endpoint访问 S3 存储空间的连接地址,如 https://s3.us-west-2.amazonaws.com
aws_s3_use_aws_sdk_default_behavior是否使用 AWS SDK 默认的认证凭证。有效值:truefalse (默认)。
aws_s3_use_instance_profile是否使用 Instance Profile 或 Assumed Role 作为安全凭证访问 S3。有效值:truefalse (默认)。
  • 如果您使用 IAM 用户凭证(Access Key 和 Secret Key)访问 S3,则需要将此项设为 false,并指定 aws_s3_access_keyaws_s3_secret_key
  • 如果您使用 Instance Profile 访问 S3,则需要将此项设为 true
  • 如果您使用 Assumed Role 访问 S3,则需要将此项设为 true,并指定 aws_s3_iam_role_arn
  • 如果您使用外部 AWS 账户通过 Assumed Role 认证访问 S3,则需要额外指定 aws_s3_external_id
aws_s3_access_key访问 S3 存储空间的 Access Key。
aws_s3_secret_key访问 S3 存储空间的 Secret Key。
aws_s3_iam_role_arn有访问 S3 存储空间权限 IAM Role 的 ARN。
aws_s3_external_id用于跨 AWS 账户访问 S3 存储空间的外部 ID。
azure_blob_path用于存储数据的 Azure Blob Storage 路径,由 Storage Account 中的容器名称和容器下的子路径(如有)组成,如 testcontainer/subpath
azure_blob_endpointAzure Blob Storage 的链接地址,如 https://test.blob.core.windows.net
azure_blob_shared_key访问 Azure Blob Storage 的 Shared Key。
azure_blob_sas_token访问 Azure Blob Storage 的共享访问签名(SAS)。

注意

成功创建存算分离集群后,您只能修改与安全凭证相关的配置项。如果您更改了原有存储路径相关的配置项,则在此之前创建的数据库和表将变为只读,您无法向其中导入数据。
如果您想在集群创建后手动创建默认存储卷,则只需添加以下配置项:

run_mode = shared_data
cloud_native_meta_port = <meta_port>
enable_load_volume_from_conf = false

如果您想在 FE 配置文件中指定存储相关的属性,示例如下:

如果您使用 AWS S3:
---如果您使用 AWS SDK 默认的认证凭证,请添加以下配置项:
run_mode = shared_data
cloud_native_meta_port = <meta_port>
cloud_native_storage_type = S3
# 如 testbucket/subpath
aws_s3_path = <s3_path>
# 如 us-west-2
aws_s3_region = <region>
# 如 https://s3.us-west-2.amazonaws.com
aws_s3_endpoint = <endpoint_url>
aws_s3_use_aws_sdk_default_behavior = true
---如果您使用 MinIO:
run_mode = shared_data
cloud_native_meta_port = <meta_port>
cloud_native_storage_type = S3
# 如 testbucket/subpath
aws_s3_path = <s3_path>
# 例如:us-east-1
aws_s3_region = <region>
# 例如:http://172.26.xx.xxx:39000
aws_s3_endpoint = <endpoint_url>
aws_s3_access_key = <access_key>
aws_s3_secret_key = <secret_key>

3.2 配置存算分离集群 BE 节点

在启动 BE 之前,在 BE 配置文件 be.conf 中添加以下配置项:
starlet_port = <starlet_port>
storage_root_path = <storage_root_path>
配置项描述
starlet_port存算分离模式下,用于 BE 心跳服务的端口。默认值:9070
storage_root_path本地缓存数据依赖的存储目录以及该存储介质的类型,多块盘配置使用分号(;)隔开。如果为 SSD 磁盘,需在路径后添加 ,medium:ssd,如果为 HDD 磁盘,需在路径后添加 ,medium:hdd。例如:/data1,medium:hdd;/data2,medium:ssd。默认值:${STARROCKS_HOME}/storage

本地缓存数据将存储在 <storage_root_path>/starlet_cache 路径下。

3.3 手动创建并设置默认存储卷

在部署新 StarRocks 存算分离集群时,如果您禁止了 StarRocks 创建内置存储卷 (将 enable_load_volume_from_conf 设置为 false),则启动后必须先创建和设置默认存储卷,然后才能在集群中创建数据库和表。

以下示例使用 IAM user-based 认证为 AWS S3 存储空间 defaultbucket 创建存储卷 def_volume,激活并将其设置为默认存储卷:

CREATE STORAGE VOLUME def_volume
TYPE = S3
LOCATIONS = ("s3://defaultbucket/test/")
PROPERTIES
(
    "enabled" = "true",
    "aws.s3.region" = "us-west-2",
    "aws.s3.endpoint" = "https://s3.us-west-2.amazonaws.com",
    "aws.s3.use_aws_sdk_default_behavior" = "false",
    "aws.s3.use_instance_profile" = "false",
    "aws.s3.access_key" = "xxxxxxxxxx",
    "aws.s3.secret_key" = "yyyyyyyyyy"
);
SET def_volume AS DEFAULT STORAGE VOLUME;

3.4  创建数据库和云原生表

创建默认存储卷后,您可以使用该存储卷创建数据库和云原生表。

目前,StarRocks 存算分离集群支持以下数据模型:

    明细模型(Duplicate Key)

    聚合模型(Aggregate Key)

    更新模型(Unique Key)

    主键模型(Primary Key)(当前暂不支持持久化主键索引)

以下示例创建数据库 cloud_db,并基于明细模型创建表 detail_demo,启用本地磁盘缓存,将热数据有效期设置为一个月,并禁用异步数据导入

CREATE DATABASE cloud_db;
USE cloud_db;
CREATE TABLE IF NOT EXISTS detail_demo (
    recruit_date  DATE           NOT NULL COMMENT "YYYY-MM-DD",
    region_num    TINYINT        COMMENT "range [-128, 127]",
    num_plate     SMALLINT       COMMENT "range [-32768, 32767] ",
    tel           INT            COMMENT "range [-2147483648, 2147483647]",
    id            BIGINT         COMMENT "range [-2^63 + 1 ~ 2^63 - 1]",
    password      LARGEINT       COMMENT "range [-2^127 + 1 ~ 2^127 - 1]",
    name          CHAR(20)       NOT NULL COMMENT "range char(m),m in (1-255) ",
    profile       VARCHAR(500)   NOT NULL COMMENT "upper limit value 65533 bytes",
    ispass        BOOLEAN        COMMENT "true/false")
DUPLICATE KEY(recruit_date, region_num)
DISTRIBUTED BY HASH(recruit_date, region_num)
PROPERTIES (
    "storage_volume" = "def_volume",
    "datacache.enable" = "true",
    "datacache.partition_duration" = "1 MONTH",
    "enable_async_write_back" = "false"
);

除了常规表 PROPERTIES 之外,您还需要在创建表时指定以下 PROPERTIES:

属性描述
datacache.enable是否启用本地磁盘缓存。默认值:true
  • 当该属性设置为 true 时,数据会同时导入对象存储(或 HDFS)和本地磁盘(作为查询加速的缓存)。
  • 当该属性设置为 false 时,数据仅导入到对象存储中。
说明
如需启用本地磁盘缓存,必须在 BE 配置项 storage_root_path 中指定磁盘目录。
datacache.partition_duration热数据的有效期。当启用本地磁盘缓存时,所有数据都会导入至本地磁盘缓存中。当缓存满时,StarRocks 会从缓存中删除最近较少使用(Less recently used)的数据。当有查询需要扫描已删除的数据时,StarRocks 会检查该数据是否在有效期内。如果数据在有效期内,StarRocks 会再次将数据导入至缓存中。如果数据不在有效期内,StarRocks 不会将其导入至缓存中。该属性为字符串,您可以使用以下单位指定:YEARMONTHDAYHOUR,例如,7 DAY12 HOUR。如果不指定,StarRocks 将所有数据都作为热数据进行缓存。
说明
仅当 datacache.enable 设置为 true 时,此属性可用。
enable_async_write_back是否允许数据异步写入对象存储。默认值:false
  • 当该属性设置为 true 时,导入任务在数据写入本地磁盘缓存后立即返回成功,数据将异步写入对象存储。允许数据异步写入可以提升导入性能,但如果系统发生故障,可能会存在一定的数据可靠性风险。
  • 当该属性设置为 false 时,只有在数据同时写入对象存储和本地磁盘缓存后,导入任务才会返回成功。禁用数据异步写入保证了更高的可用性,但会导致较低的导入性能。

3.5 查看表信息

您可以通过 SHOW PROC "/dbs/<db_id>" 查看特定数据库中的表的信息。

StarRocks 存算分离集群中表的 Type 为 CLOUD_NATIVE。StoragePath 字段为表在对象存储中的路径。

4. 后期管理

-- 将 <password> 替换为您要为 root 用户设置的密码。

SET PASSWORD = PASSWORD('<password>')

-全局设置 is_report_success 为 false:

SET GLOBAL is_report_success = false;

-全局设置 enable_profile 为 false:

SET GLOBAL enable_profile = false;

-全局设置 enable_pipeline_engine 为 true:

SET GLOBAL enable_pipeline_engine = true;

-全局设置 parallel_fragment_exec_instance_num 为 1:

SET GLOBAL parallel_fragment_exec_instance_num = 1;

-全局设置 pipeline_dop 为 0:

SET GLOBAL pipeline_dop = 0;

-- 将 <username> 替换为需要增加最大连接数的用户名。

SET PROPERTY FOR '<username>' 'max_user_connections' = '1000';


# 什么是 StarRocks

StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理,就可以用 StarRocks 来支持多种数据分析场景的极速分析。

StarRocks 架构简洁,采用了全面向量化引擎,并配备全新设计的 CBO (Cost Based Optimizer) 优化器,查询速度(尤其是多表关联查询)远超同类产品。

StarRocks 能很好地支持实时数据分析,并能实现对实时更新数据的高效查询。StarRocks 还支持现代化物化视图,进一步加速查询。

使用 StarRocks,用户可以灵活构建包括大宽表、星型模型、雪花模型在内的各类模型。

StarRocks 兼容 MySQL 协议,支持标准 SQL 语法,易于对接使用,全系统无外部依赖,高可用,易于运维管理。StarRocks 还兼容多种主流 BI 产品,包括 Tableau、Power BI、FineBI 和 Smartbi。

# 适用场景

StarRocks 可以满足企业级用户的多种分析需求,包括 OLAP (Online Analytical Processing) 多维分析、定制报表、实时数据分析和 Ad-hoc 数据分析等。

# OLAP 多维分析

利用 StarRocks 的 MPP 框架和向量化执行引擎,用户可以灵活的选择雪花模型,星型模型,宽表模型或者预聚合模型。适用于灵活配置的多维分析报表,业务场景包括:

    用户行为分析

    用户画像、标签分析、圈人

    高维业务指标报表

    自助式报表平台

    业务问题探查分析

    跨主题业务分析

    财务报表

    系统监控分析

# 实时数据仓库

StarRocks 设计和实现了 Primary-Key 模型,能够实时更新数据并极速查询,可以秒级同步 TP (Transaction Processing) 数据库的变化,构建实时数仓,业务场景包括:

    电商大促数据分析

    物流行业的运单分析

    金融行业绩效分析、指标计算

    直播质量分析

    广告投放分析

    管理驾驶舱

    探针分析APM(Application Performance Management)

# 高并发查询

StarRocks 通过良好的数据分布特性,灵活的索引以及物化视图等特性,可以解决面向用户侧的分析场景,业务场景包括:

    广告主报表分析

    零售行业渠道人员分析

    SaaS 行业面向用户分析报表

    Dashboard 多页面分析

# 统一分析

    通过使用一套系统解决多维分析、高并发查询、预计算、实时分析查询等场景,降低系统复杂度和多技术栈开发与维护成本。

    使用 StarRocks 统一管理数据湖和数据仓库,将高并发和实时性要求很高的业务放在 StarRocks 中分析,也可以使用 External Catalog 和外部表进行数据湖上的分析。


系统架构

StarRocks 架构简洁,整个系统的核心只有 FE(Frontend)、BE(Backend)两类进程,不依赖任何外部组件,方便部署与维护。FE 和 BE 模块都可以在线水平扩展,元数据和业务数据都有副本机制,确保整个系统无单点。StarRocks 提供 MySQL 协议接口,支持标准 SQL 语法。用户可通过 MySQL 客户端方便地查询和分析 StarRocks 中的数据。

1.FE

FE 是 StarRocks 的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作。每个 FE 节点都会在内存保留一份完整的元数据,这样每个 FE 节点都能够提供无差别的服务。

FE 有三种角色:Leader FE,Follower FE 和 Observer FE。Follower 会通过类 Paxos 的 Berkeley DB Java Edition(BDBJE)协议自动选举出一个 Leader。三者区别如下:

  • Leader

    • Leader 从 Follower 中自动选出,进行选主需要集群中有半数以上的 Follower 节点存活。如果 Leader 节点失败,Follower 会发起新一轮选举。
    • Leader FE 提供元数据读写服务。只有 Leader 节点会对元数据进行写操作,Follower 和 Observer 只有读取权限。Follower 和 Observer 将元数据写入请求路由到 Leader 节点,Leader 更新完数据后,会通过 BDB JE 同步给 Follower 和 Observer。必须有半数以上的 Follower 节点同步成功才算作元数据写入成功。
  • Follower

    • 只有元数据读取权限,无写入权限。通过回放 Leader 的元数据日志来异步同步数据。
    • 参与 Leader 选举,必须有半数以上的 Follower 节点存活才能进行选主。
  • Observer

    • 主要用于扩展集群的查询并发能力,可选部署。
    • 不参与选主,不会增加集群的选主压力。
    • 通过回放 Leader 的元数据日志来异步同步数据。

2.BE

BE 是 StarRocks 的后端节点,负责数据存储、SQL执行等工作。

  • 数据存储方面,StarRocks 的 BE 节点都是完全对等的,FE 按照一定策略将数据分配到对应的 BE 节点。BE 负责将导入数据写成对应的格式存储下来,并生成相关索引。

  • 在执行 SQL 计算时,一条 SQL 语句首先会按照具体的语义规划成逻辑执行单元,然后再按照数据的分布情况拆分成具体的物理执行单元。物理执行单元会在对应的数据存储节点上执行,这样可以实现本地计算,避免数据的传输与拷贝,从而能够得到极致的查询性能。

在进行 Stream load 导入时,FE 会选定一个 BE 节点作为 Coordinator BE,负责将数据分发到其他 BE 节点。导入的最终结果由 Coordinator BE 返回给用户。更多信息,参见 Stream load

数据管理

StarRocks 使用列式存储,采用分区分桶机制进行数据管理。一张表可以被划分成多个分区,如将一张表按照时间来进行分区,粒度可以是一天,或者一周等。一个分区内的数据可以根据一列或者多列进行分桶,将数据切分成多个 Tablet。Tablet 是 StarRocks 中最小的数据管理单元。每个 Tablet 都会以多副本 (replica) 的形式存储在不同的 BE 节点中。您可以自行指定 Tablet 的个数和大小。 StarRocks 会管理好每个 Tablet 副本的分布信息。

下图展示了 StarRocks 的数据划分以及 Tablet 多副本机制。图中,表按照日期划分为 4 个分区,第一个分区进一步切分成 4 个 Tablet。每个 Tablet 使用 3 副本进行备份,分布在 3 个不同的 BE 节点上。

由于一张表被切分成了多个 Tablet,StarRocks 在执行 SQL 语句时,可以对所有 Tablet 实现并发处理,从而充分的利用多机、多核提供的计算能力。用户也可以利用 StarRocks 数据的切分方式,将高并发请求压力分摊到多个物理节点,从而可以通过增加物理节点的方式来扩展系统支持高并发的能力。

Tablet 的分布方式与具体的物理节点没有相关性。在 BE 节点规模发生变化时,比如在扩容、缩容时,StarRocks 可以做到无需停止服务,直接完成节点的增减。节点的变化会触发 Tablet 的自动迁移。当节点增加时,一部分 Tablet 会在后台自动被均衡到新增的节点,从而使得数据能够在集群内分布的更加均衡。在节点减少时,下线机器上的 Tablet 会被自动均衡到其他节点,从而自动保证数据的副本数不变。管理员能够非常容易地实现 StarRocks 的弹性伸缩,无需手工进行任何数据的重分布。

StarRocks 支持 Tablet 多副本存储,默认副本数为三个。多副本能够保证数据存储的高可靠以及服务的高可用。在使用三副本的情况下,一个节点的异常不会影响服务的可用性,集群的读、写服务仍然能够正常进行。另外,增加副本数还有助于提高系统的高并发查询能力。


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回