在2024年11月29日举办的Flink Forward Asia 2024大会上,阿里巴巴正式开源了 Fluss 项目(https://github.com/alibaba/fluss)。在11月29日下午的时候,各大微信技术群里都在讨论。所以基于此,我也跟着学习研究下这块新开源的框架。
fluss官方的说明是:
Fluss 是一种专为实时分析而构建的流式存储,可用作 Lakehouse 架构的实时数据层。 凭借其列式流和实时更新功能,Fluss 可与 Apache Flink 无缝集成,从而实现针对实时应用程序量身定制的高吞吐量、低延迟、经济高效的流式数据仓库。
所以对于我来说Fluss其实就是一个第三方的存储,只是说他的性能比较高,官方说可提供亚秒级的读写。所以配合flink的使用的话,几乎可以达到准实时读写的效率,使flink相关的task处理数据更加丝滑。
下面我们来着重介绍下Fluss的一些概念。
一、Fluss官网
目前fluss是在github上进行开源的,开源地址是:
https://github.com/alibaba/fluss
对于fluss的官方介绍文档地址是:
https://alibaba.github.io/fluss-docs/
二、Fluss定位
Fluss目前的定位主要是为Apache Flink提供实时流存储底座,旨在解决流存储在分析方面长期存在的挑战。我把它看做就是一个第三方的高效存储组件(因为flink自身是分布式计算框架,自身无存储功能)。
三、Fluss特点
根据官网的介绍,这里我总结出他的特点有:
1、实时读写:支持亚秒级的流式读写能力。 2、列式裁剪:以列存储格式存储所有的实时流数据,提升读写性能。 3、流式更新:支持大规模的数据进行实时流式更新。 4、CDC订阅:支持mysql的cdc订阅,实现从源头直接实时拉取数据。 5、实时点查:支持高性能主键的点查,可以进行多表关联的数据加工。 6、湖流一体,无缝集成Lakehouse(例如paimon,iceberg等),与Lakehouse想结合形成实时数据层和冷数据层。
四、Fluss架构
fluss的整体架构如上图,主要包含两部分,分别是:CoordinatorServer和TabletServer。他们分别的作用是:
CoordinatorServer部分:
CoordinatorServer是集群的中央控制和管理组件。它负责维护元数据、管理 tablet 分配、列出节点和处理权限。此外,它还协调关键操作,例如:
1、在节点扩展(升级或降级)期间重新平衡数据。 2、在发生节点故障时管理数据迁移和服务节点切换。 3、监督表管理任务,包括创建或删除表以及更新存储桶计数。协调服务器作为集群的大脑,确保集群高效运行和资源无缝管理。
TabletServer部分:
TabletServer负责数据存储、持久化以及直接向用户提供 I/O 服务,它由两个关键组件组成:LogStore和KvStore。
对于支持更新的PrimaryKey 表, LogStore和KvStore均被激活。KvStore 用于高效支持更新和点查找。LogStore 用于存储表的更新日志。 对于仅支持附加的日志表,仅激活LogStore,从而优化写入密集型工作负载的性能。这种架构确保TabletServer根据表类型提供定制的数据处理功能。
在TabletServer内部还有2种角色,一种是Log Store和KV Store两部分,这两部分的作用存储,分别存储的内容是:
LogStore部分:
LogStore旨在存储日志数据,功能类似于数据库 binlog。消息只能追加,不能修改,从而确保数据完整性。其主要目的是实现低延迟流式读取,并用作恢复 KvStore 的预写日志 (WAL )。
KvStore部分:
bKvStore用于存储表数据,其功能类似于数据库表,支持数据更新和删除,实现了高效的查询和表管理。此外,还会生成全面的变更日志来跟踪数据修改,支持下游CDC消费。
在上诉两部分存储里面,他的底层以Tablet / Bucket来进行数据的组织,原理是:根据定义的分桶策略,表数据被划分为多个bucket。LogStore和KvStore的数据存储在Tablet中,每个tablet由一个LogTablet和一个KvTablet(可选)组成,具体取决于表是否支持更新。LogStore和KvStore都遵循相同的bucket拆分和tablet分配策略,具有相同tablet_id的LogTablets和KvTablets总是被分配到同一TabletServer,以实现高效的数据管理,LogTablet支持基于表配置的复制因子的多个副本,确保高可用性和容错性,目前KvTablets不支持复制。
以上就是关于Fluss相关的一些概念介绍。
备注:
1、在群里大家有问到这里的Fluss与paimon有什么区别,如下图:
这里就我个人的意见来说,fluss和paimon都差不多,主要都是依赖于第三方存储(例如hdfs,oss等第三方存储)。只是内部整体架构不一致,fluss更适合实时流读取场景,流读取效率更高。paimon可支持流读取和批量读取。
还没有评论,来说两句吧...