
❝基于Docker搭建一套演示环境,分钟级快速体验Doris实时数仓的"采-存-用"链路。
引用:
https://mp.weixin.qq.com/s/DVAIX0nCuappAZMhs7_EKg

一、环境信息
1.1 硬件信息
CU:8C16G
硬件规格最小 4C8G CPU架构:X86_64
Docker示例镜像是基于x86做的,故此需要一台 x86 机器
1.2 软件信息
Docker:26.1.4
Docker Compose:2.2.2
二、体验流程

2.1 上传yaml脚本
version: "3"
services:
mysql:
image: mysql:8.0.31
volumes:
- /data/mysql/script:/docker-entrypoint-initdb.d
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: doris-test
MYSQL_PASSWORD: 123456
command:
--character-set-server=utf8
hostname: mysql
ports:
- 3306:3306
jobmanager:
image: apache/flink:1.17-scala_2.12
expose:
- 6123
ports:
- 8081:8081
volumes:
- /data/flink/flink-doris-connector-1.17-1.6.2.jar:/opt/flink/lib/flink-doris-connector-1.17-1.6.2.jar
- /data/flink/flink-sql-connector-mysql-cdc-2.4.2.jar:/opt/flink/lib/flink-sql-connector-mysql-cdc-2.4.2.jar
command: jobmanager
environment:
- JOB_MANAGER_RPC_ADDRESS=jobmanager
taskmanager:
image: apache/flink:1.17-scala_2.12
expose:
- 6121
- 6122
depends_on:
- jobmanager
volumes:
- /data/flink/flink-doris-connector-1.17-1.6.2.jar:/opt/flink/lib/flink-doris-connector-1.17-1.6.2.jar
- /data/flink/flink-sql-connector-mysql-cdc-2.4.2.jar:/opt/flink/lib/flink-sql-connector-mysql-cdc-2.4.2.jar
command: taskmanager
links:
- "jobmanager:jobmanager"
environment:
- JOB_MANAGER_RPC_ADDRESS=jobmanager
doris:
image: registry.cn-hangzhou.aliyuncs.com/freeoneplus/doris:2.1.4-all
hostname: doris
ports:
- 8030:8030
- 9030:9030
- 8040:8040
network_mode: host
superset:
image: selectdb/superset_3.0.1-cloud_3.0.3:latest
user: "root"
environment:
- SUPERSET_SECRET_KEY="doris"
command:
- "sh"
- -c
- |
superset db upgrade
superset fab create-admin --username admin --password doris --firstname Superset --lastname Admin --email admin@superset.com
superset init
/bin/sh -c /usr/bin/run-server.sh
ports:
- 8088:8088
restart: on-failure
network_mode: host
yaml脚本共5个进程:
MySQL:TP库,模拟业务库,初始化密码为123456,初始化的数据库为doris-test JobManager:Flink-Job-Manager,负责 Flink 任务管理等 TaskManager:Flink-Task-Manager,负责 Flink 任务执行等 Doris:All-In-One 的镜像,内置 1FE 1BE,且会自动注册 SuperSet:All-In-One 的镜像,里面内置了 Apache Doris 数据源,用户名为admin,密码为doris
其中,需要将Flink依赖的 Flink-MySQL-Connector 和 Flink-Doris-Connector 两个依赖jar包下载至对应宿主机目录,这里使用的是/data/flink目录,可根据自身需要调整:
# flink-doris-connector-1.17-1.6.2 下载地址
https://repo1.maven.org/maven2/org/apache/doris/flink-doris-connector-1.17/1.6.2/flink-doris-connector-1.17-1.6.2.jar
# flink-sql-connector-mysql-cdc-2.4.2 下载地址
https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mysql-cdc/2.4.2/flink-sql-connector-mysql-cdc-2.4.2.jar

2.2 启动yaml脚本
# 后台启动
docker-compose -f ./doris-demo.yaml up -d
# 停止
docker-compose -f ./doris-demo.yaml stop

初次up会先pull对应的镜像image包:
mysql:8.0.31
apache/flink:1.17-scala_2.12
registry.cn-hangzhou.aliyuncs.com/freeoneplus/doris:2.1.4-all
selectdb/superset_3.0.1-cloud_3.0.3:latest
再进行构建启动,这边提前pull好了所以直接显示Running 6/6 了。

2.3 初始化mysql数据
启动yaml脚本后,就可以开始体验了。
首先初始化一下mysql源的数据,直接基于 docker-compose exec命令 创建了一张名为 orders 的表,并初始化三条数据。
docker-compose -f ./doris-demo.yaml exec mysql mysql -uroot -p123456 -e "
DROP TABLE IF EXISTS \`doris-test\`.\`orders\`;
CREATE TABLE \`doris-test\`.\`orders\` (
order_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
order_date DATETIME NOT NULL,
customer_name VARCHAR(255) NOT NULL,
price DECIMAL(10, 5) NOT NULL,
product_id INTEGER NOT NULL,
order_status BOOLEAN NOT NULL -- Whether order has been placed
) AUTO_INCREMENT = 10001;
INSERT INTO \`doris-test\`.\`orders\`
VALUES (default, '2020-07-05 10:08:22', 'Jark', 50.50, 102, false),
(default, '2020-07-05 10:11:09', 'Sally', 15.00, 105, false),
(default, '2020-07-05 12:00:30', 'Edward', 25.25, 106, false);"

查询验证:
-- 进入mysql client
docker-compose -f ./doris-demo.yaml exec mysql mysql -uroot -p123456
-- 查询验证
select * from orders;

2.4 初始化Flink同步任务
基于mysql源表创建 Flink同步任务,自动同步mysql源的表结构并创建 cdc 常驻任务持续导入数据(具体脚本说明可参考Doris官网的Flink-Doris-Connector 章节):
docker-compose -f ./doris-demo.yaml exec jobmanager /opt/flink/bin/flink run \
-Dexecution.checkpointing.interval=5s \
-Dparallelism.default=1 \
-c org.apache.doris.flink.tools.cdc.CdcTools \
/opt/flink/lib/flink-doris-connector-1.17-1.6.2.jar \
mysql-sync-database \
--database mysql_demo \
--mysql-conf hostname=${改为你的机器内网IP地址} \
--mysql-conf username=root \
--mysql-conf password=123456 \
--mysql-conf port=3306 \
--mysql-conf database-name=doris-test \
--sink-conf fenodes=${改为你的机器内网IP地址}:8030 \
--sink-conf benodes=${改为你的机器内网IP地址}:8040 \
--sink-conf username=root \
--sink-conf password= \
--sink-conf jdbc-url=jdbc:mysql://${改为你的机器内网IP地址}:9030 \
--sink-conf sink.label-prefix=label \
--single-sinktrue \
--table-conf replication_num=1 ;

2.5 Doris数据验证
当mysql源数据初始化和flink同步任务启动后,采-存的链路已经搭建完成,通过 docker-compose exec 命令快速对doris数据进行结果验证:
docker-compose -f ./doris-demo.yaml exec doris mysql -uroot -P9030 -h127.0.0.1 -e "select * from mysql_demo.orders"

2.6 SuperSet快速体验
"采-存-用"的用,这里以SuperSet为例,进行一个常见场景的实时报表演示。
2.6.1 登录
http://${改为你的机器内网IP地址} :8088/login/

2.6.2 配置数据源
右上角点击➕的【Connect database】

可以点击一下中间的【TEST CONNECTION】进行链路通信测试,然后点击【CONNECT】完成数据源配置

2.6.3 创建数据集
完成【配置数据源】后,选择对应的DATABASE、SCHEMA和TABLE,点击右下角【CREATE DATABASE AND CREATE CHART】完成数据集创建

2.6.4 创建看板
右上角点击➕的【Databoard】进行数据看板创建

2.6.5 配置图表
创建看板后,开始配置图标,点击【CREATE A NEW CHART】

按下图指示选择对应展示图表类似,也可以DIY

配置展示的X-值,然后进行刷新预览

完成图表配置后,进行保存

完成图表创建

2.6.6 设置自动刷新
图表默认是不进行自动刷新,这边为了演示【实时】选择10秒刷新并保存配置。

2.6.7 SuperSet 看板实时更新
在mysql数据源端新增测试数据:
docker-compose -f ./doris-demo.yaml exec mysql mysql -uroot -p123456 -e "
INSERT INTO \`doris-test\`.\`orders\`
VALUES (default, '2020-07-05 10:30:15', 'Tom', 12.50, 104, false),
(default, '2020-07-05 10:35:09', 'Sally', 35.00, 108, false),
(default, '2020-07-05 11:00:30', 'Jark', 66.15, 106, false);"

查看SuperSet 看板实时更新:

三、体验总结
至此,我们从0到1快速体验了Doris实时数仓的"采-存-用"链路。
如果没有因为网络因素卡在pull image,分钟级即可完成全链路的体验。
本次demo主要是为了快速入门体验,切记不可上生产!
实际生产需要按上述流程步骤进行拆解重组,基于物理机或虚拟机等其它方式部署。
下期,我们将一起探讨其它更有趣有用有价值的内容,敬请期待!

一臻数据致力于大数据AI时代的前沿内容分享,会持续分享更多有趣有用有态度的知识。同时也欢迎大家投稿,共建共进,帮助圈友们冲破认知壁垒,实现自我提升!
另外,整理了份《一臻数据知识库》,其中包含 Apache Doris 和 Data+AI 的学习资料、学习课程、白皮书、研究报告、行业标准 和 实践指南 等内容,会持续更新,欢迎关注公众号,免费领取。
资料获取 🔗 欢迎扫描下方二维码图片 备注【Doris】免费领取❗️

往期推荐

点击下方蓝字关注一臻数据




