设计计思路
基本思路
开源数据平台的设计思路是通过 Flink SQL Batch、StartRocks SQL 、StartRocks物化视图 的能力实现一个离线任务的开发;使用 DolphinScheduler 进行离线工作流编排和调度;通过 Flink CDC 和 Flink SQL 实现流处理能力,进行实时任务的开发;选择 StartRocks 作为实时数据仓库来写入数据并进行 OLAP 查询,提供数据供魔方进行分析及展示;通过 Dinky 来提供一个完整的任务开发运维的平台能力,满足常见的企业数据平台需求,
技术介绍
StartRocks
StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。兼容 MySQL 协议,可使用 MySQL 客户端和常用 BI 工具对接。同时 StarRocks 具备水平扩展,高可用、高可靠、易运维等特性。广泛应用于实时数仓、OLAP 报表、数据湖分析等场景。
充分吸收关系型OLAP数据库和分布式存储系统在大数据时代的优秀研究成果,在业界实践的基础上,进一步改进优化、升级架构,并增添了众多全新功能,形成了全新的企业级产品。采用了全面向量化引擎,并配备全新设计的 CBO (Cost Based Optimizer) 优化器,查询速度(尤其是多表关联查询)远超同类产品。
支持多种数据模型(明细模型、聚合模型、更新模型),多种导入方式(批量和实时),可整合和接入多种现有系统(Spark、Flink、Hive、 ElasticSearch)。
-
核心优势
-
MPP 分布式执行框架
-
全面向量化执行引擎
-
CBO 优化器
-
可实时更新的列式存储引擎
-
StarRocks 能够支持秒级的导入延迟,提供准实时的服务能力。StarRocks 的存储引擎在数据导入时能够保证每一次操作的 ACID
-
StarRocks 存储引擎不仅能够提供高效的 Partial Update 操作,也能高效处理 Upsert 类操作。使用 Delete-and-insert 的实现方式
-
-
智能的物化视图
-
StarRocks 支持用户使用 物化视图 ( materialized view )进行查询加速和 数仓 分层
-
只要原始表数据发生变更,物化视图的更新也同步完成
-
-
数据湖分析
-
Flink
Flink 是一个计算框架和分布式处理引擎,主要用于无边界与有边界数据流上进行有状态的计算,Flink 能在所有常见集群环境中运行,并且能以内存速度和任意规模进行计算。在企业应用中,Flink 常用于高效连接消息流,如 Kafka,各种数据库、文件系统等,可以实时加工处理、也支持批处理,最终将数据高效写入消息流、数据库、软件系统等。
-
核心优势
-
高吞吐量、低延迟、高性能;
-
支持 Event Time 和乱序事件;
-
支持 Exactly-Once 语义;
-
支持多种流式窗口;
-
自身的内存模型与管理;
-
Batch 与 Stream 在 SQL 层实现一体;
-
丰富的 Connector。
-
Flink CDC
Flink CDC 是 Flink 的子项目,是 Flink 的一组原连接器,用于 CDC 从不同数据库接收/更改数据,Flink CDC 将 Debezium 集成为引擎,异步或数据更改,因此 Flink CDC 可以充分使用和发挥 Debezium 的能力,并且可以无缝对接 Flink 使用其 SQL API 和 DataStream API 的能力,最终写入各种数据源。
-
核心优势
-
简化实时数据集成:无须额外部署 Debezium、Canal、Kafka 等组件,运维成本大幅降低,链路稳定性提升。
-
支持丰富的数据源:目前支持 MongoDB、Mysql、OceanBase、Oracle、Postgres、SQLServer、TiDB 数据源的 CDC。
-
支持全量、增量订阅及自动切换:能进行全量与增量自动切换,支持 Exactly-once 语义,支持无锁并发读取,支持从检查点、保存点恢复, 断点续传,保证数据的准确性。
-
无缝对接 Flink:无缝对接 Flink 生态,利用 Flink 众多 Source 及 Sink 能力,可发挥 Flink 双流、流维关联等能力。
-
支持 FlinkSQL:支持 FlinkSQL 定义 Flink CDC 任务,进一步降低使用门槛与运维成本。
-
Dinky
Dinky 是基于 Apache Flink 二次开发的一款实时计算平台,主要为了更好地进行数据仓库和数据湖的建设与运维。Dinky 主要分为两大块,Data Studio 以及运维平台,数据开发方面主要支持 Flink SQL、Flink Jar 以及普通的 SQL 任务。
Dinky 平台是通过 Flink API、Flink Client、Yarn、K8s 等提交和管理 Flink 任务,全过程只需要在 Dinky 中开发 Flink SQL ,不需要进行编译打包,Flink 任务就可自动提交到各种环境的集群。它支持多种提交方式,包括 Local、Standalone、Yarn、K8s 等方式,此外还提供了平台的管理能力,比如数据源、集群、监控报警的能力。对外可以通过 Flink 连接器以及数据源连接扩展来对外部数据源进行数据处理及管理。
-
核心优势
-
多兼容:基于 Apache Flink 源码二次开发,兼容官方 1.11~1.15 版本源码,也兼容用户自己的分支改进版。支持官方及其他扩展的 SQL Connector,如 ChunJun。支持 FlinkCDC 官方的 CDC SQL Connector。
-
无侵入:Spring Boot 轻应用快速部署,不需要在任何 Flink 集群修改源码或添加额外插件,无感知连接和监控 Flink 集群。如果要使用 Flink MetaStore、整库同步等功能,则需要在 Flink lib 中添加对应的依赖包。
-
无依赖:只需要 Mysql 数据库与 JDK1.8 环境,不依赖任何其他中间件,如 zookeeper、hadoop 等。
-
易用性:Flink 多种执行模式无感知切换,支持 Flink 多版本切换,自动托管实时任务、恢复点、报警等, 自定义各种配置,持久化管理的 Flink Catalog (即 Flink MetaStore)。
-
增强式:兼容且增强官方 FlinkSQL 语法,如 SQL 表值聚合函数、全局变量、CDC 整库同步、执行环境、 语句合并、共享会话等。
-
易扩展:源码采用 SPI 插件化及各种设计模式支持用户快速扩展新功能,如连接器、数据源、报警方式、 Flink Catalog、CDC 整库同步、自定义 FlinkSQL 语法等。
-
沉浸式:提供专业的 DataStudio 功能,支持全屏开发、自动提示与补全、语法高亮、语句美化、语法校验、 调试预览结果、全局变量、MetaStore、字段级血缘分析、元数据查询、FlinkSQL 生成等功能。
-
一站式:提供从 FlinkSQL 开发调试到上线下线的运维监控及 SQL 的查询执行能力,使数仓建设及数据治理 一体化。
-
易二开:源码后端基于 Spring Boot 框架开发,前端基于 React (Ant Design Pro) 开发,及其易扩展的设计, 易于企业进行定制化功能开发或集成到已有的开源或自建数据平台
-
整体架构如下
核心
- Flink CDC 作为 CDC 技术;
- Flink SQL 流处理能力;
- Dinky 整库同步能力;
- StartRocks 提供 OLAP 查询能力,上游通过实时写入,StartRocks 数据查询也具备了一定的实时性;
- Dinky 在实时数据的开发上提供了监控和报警的能力,当任务触发异常或者是完成的时候,可以通过钉钉或邮箱等进行一个报警通知。