StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。

本文将介绍如何通过 StarRocks Routine Load 将数据导入从 AutoMQ for Kafka 导入 StarRocks。关于Routine Load的基本原理可以参考 Routine Load 基本原理

info

本文中提及的 AutoMQ Kafka 术语,均特指安托盟丘(杭州)科技有限公司通过 GitHub AutoMQ 组织下开源的 automq<!-- -->-<!-- -->for<!-- -->-<!-- -->kafka 项目。

环境准备

准备 StarRocks 以及测试数据

请确保已经准备好了可用的 StarRocks 集群。本文为了方便演示过程,参考 使用 Docker 部署 StarRocks 在一台 Linux 机器上安装了作为 Demo 的 StarRocks 集群。

创建库和主键模型的测试表:

create database automq_db;create table users (    id bigint NOT NULL,    name string NOT NULL,    timestamp string NULL,    status string NULL) PRIMARY KEY (id)DISTRIBUTED BY HASH(id)PROPERTIES (    "replication_num" = "1",    "enable_persistent_index" = "true");

准备 AutoMQ Kafka 环境和测试数据

参考 注册 AutoMQ Cloud 免费体验▸ 部署好 AutoMQ Kafka 集群,确保 AutoMQ Kafka 与 StarRocks 之间保持网络连通。

在AutoMQ Kafka中快速创建一个名为 example<!-- -->\_<!-- -->topic 的主题并向其中写入一条测试 JSON 数据,可以通过以下步骤实现:

创建Topic:

使用 Apache Kafka 命令行工具来创建主题。你需要有 Kafka 环境的访问权限,并且确保 Kafka 服务正在运行。以下是创建主题的命令:

./kafka-topics.sh --create --topic exampleto_topic --bootstrap-server 10.0.96.4:9092  --partitions 1 --replication-factor 1
注意:执行命令时,需要将 topic 和 bootstarp<!-- -->-<!-- -->server 替换为实际使用的 Kafka 服务器地址。

创建 topic 之后可以用以下命令检查 topic 创建的结果。

./kafka-topics.sh --describe example_topic --bootstrap-server 10.0.96.4:9092

生成测试数据:

生成一条简单的 JSON 格式的测试数据,和前文的表需要对应。

{  "id": 1,  "name": "测试用户",  "timestamp": "2023-11-10T12:00:00",  "status": "active"}

写入测试数据

使用 Kafka 的命令行工具或者编程方式将测试数据写入到example<!-- -->\_<!-- -->topic。以下是使用命令行工具的一个示例:

echo '{"id": 1, "name": "测试用户", "timestamp": "2023-11-10T12:00:00", "status": "active"}' | sh kafka-console-producer.sh --broker-list 10.0.96.4:9092 --topic example_topic
注意:将 topic 和 bootstarp<!-- -->-<!-- -->server 替换为实际使用的 Kafka 服务器地址。

使用如下命令可以查看刚写入的 topic 数据:

sh kafka-console-consumer.sh --bootstrap-server 10.0.96.4:9092 --topic example_topic --from-beginning

创建 Routine Load 导入作业

在 StarRocks 命令行创建一个 Routine Load 导入作业,可以对 AutoMQ Kafka topic 内的数据进行持续导入:

CREATE ROUTINE LOAD automq_example_load ON usersCOLUMNS(id, name, timestamp, status)PROPERTIES(    "desired_concurrent_number" = "5",    "format" = "json",    "jsonpaths" = "[\"$.id\",\"$.name\",\"$.timestamp\",\"$.status\"]" )FROM KAFKA(    "kafka_broker_list" = "10.0.96.4:9092",    "kafka_topic" = "example_topic",    "kafka_partitions" = "0",    "property.kafka_default_offsets" = "OFFSET_BEGINNING");
注意:将 kafka<!-- -->\_<!-- -->broker<!-- -->\_<!-- -->list 替换为实际使用的 Kafka 服务器地址。

参数说明

数据格式

需要PROPERTIES子句的"format" = "json"中指定数据格式为 JSON。

数据提取和转换

如果需要指定源数据和目标表之间列的映射和转换关系,则可以配置 COLUMNS 和 jsonpaths 参数。COLUMNS 中的列名对应目标表的列名,列的顺序对应源数据中的列顺序。jsonpaths 参数用于提取 JSON 数据中需要的字段数据,就像新生成的 CSV 数据一样。然后 COLUMNS 参数对 jsonpaths 中的字段按顺序进行临时命名。更多数据转换的说明,请参见导入时实现数据转换

注意:

  • 如果每行一个 JSON 对象中 key 的名称和数量(顺序不需要对应)都能对应目标表中列,则无需配置 COLUMNS 。

验证数据导入

首先我们查看 Routine Load 导入作业的情况,确认 Routine Load 导入任务状态为 RUNNING:

show routine load\G;

然后查询 StarRocks 数据库中对应的表,我们可以看到数据已经被成功导入:

StarRocks \> select * from users;+------+--------------+---------------------+--------+| id   | name         | timestamp           | status |+------+--------------+---------------------+--------+|    1 | 测试用户     | 2023-11-10T12:00:00 | active ||    2 | 测试用户     | 2023-11-10T12:00:00 | active |+------+--------------+---------------------+--------+2 rows in set (0.01 sec)

Product

Resources

Learn More

Supports

Company

Copyright © 2023 Zhe ICP Ref. No. 2023009027.

Apache, Apache Kafka, Kafka, Apache RocketMQ, RocketMQ, and associated open source project names are trademarks of the Apache Software Foundation

END

关于我们

AutoMQ 是一家专业的消息队列和流存储软件服务供应商。AutoMQ 开源的 AutoMQ Kafka 和 AutoMQ RocketMQ 基于云对 Apache Kafka、Apache RocketMQ 消息引擎进行重新设计与实现,在充分利用云上的竞价实例、对象存储等服务的基础上,兑现了云设施的规模化红利,带来了下一代更稳定、高效的消息引擎。此外,AutoMQ 推出的 RocketMQ Copilot 专家系统也重新定义了 RocketMQ 消息运维的新范式,赋能消息运维人员更好的管理消息集群。 

🌟 GitHub 地址:https://github.com/AutoMQ/automq-for-kafka

💻 官网:https://www.automq.com

👀 B站:AutoMQ官方账号

🔍 视频号:AutoMQ 

👉 扫二维码加入我们的社区群

关注我们,一起学习更多云原生干货


AutoMQ
1 声望1 粉丝

引领消息和流存储走向云原生时代!