揭秘 Fluss 架构组件

这是 Fluss 系列的第四篇文章了,我们先回顾一下前面三篇文章主要说了哪些内容。

  1. Fluss 部署,带领大家部署Fluss 环境,体验一下 Fluss 的功能
  2. Fluss 整合数据湖的操作,体验Fluss 与数据湖的结合
  3. 讲解了 Fluss、Kafka、Paimon 之间的区别和联系

前面三篇文章可以让大家上手玩起来 Fluss 这个框架,并说明了它与 Kafka、Paimon 数据湖的关系,接下来的文章

就深入 Fluss 细节来说一下它的实现原理了,今天给大家带来的是 Fluss 架构方法的知识。

Fluss 架构

Fluss 集群由两个主要进程组成:CoordinatorServer 和 TabletServer。

file

从上面的图片看 Fluss 是一个典型的主从架构,有Client、CoordinatorServer 、TabletServer等进程,我第一眼看到这个架构感觉就有点熟悉,这分区多副本和 Kafka 架构非常像。

下面我通过一条数据的生命周期的小故事给大家描述 Fluss 架构中这些服务组件的主要功能和工作流程。

1. 小数据的诞生(Client:我是从哪里来的?)

一个风和日丽的早晨,小数据“订单 1001”诞生了。它的妈妈是个电商用户小明,爸爸是一条代码(API)。小明通过 Fluss 的 App(Client)下了一单,内容如下:

订单号:1001,金额:4999 元,状态:待发货,时间:2024-12-25 09:00:00

在被创建的瞬间,小数据便穿过了网络,奔向 Fluss 的大门。它的梦想是被记录、管理、查询,甚至有朝一日成为运营分析的明星数据!


2. 走进总部大脑(CoordinatorServer:一个靠谱的“人生规划师”)

小数据“订单 1001”刚一到达 Fluss,就立刻被送到了 CoordinatorServer(总部控制中心),它可是 Fluss 的大脑!CoordinatorServer 一看到小数据,立刻开始规划它的未来,像极了一个靠谱的职业规划师:

  • 元数据登记:CoordinatorServer 先给小数据发了个“身份证”,记录了它的订单号、金额、状态和时间。
  • 分配节点:CoordinatorServer 仔细分析了一下,“东区分拣中心(TabletServer)”距离小明最近,于是决定把小数据送过去。
  • 资源平衡:东区最近有点忙,但 CoordinatorServer 坚信可以处理好这个订单,偶尔也会平衡任务给其他中心。

规划好这一切后,CoordinatorServer 给小数据指了条明路:“去吧,到东区分拣中心报道!”


3. 踏上分拣之旅(TabletServer:我在哪里存活?)

小数据一路风尘仆仆,终于来到了 东区分拣中心(TabletServer)。这里是 Fluss 的数据加工厂,专门负责记录、存储和查询小数据。

东区分拣中心一看到小数据,马上给它安排了两份档案:

  • LogStore(日志部门): LogStore 是个勤劳的“打工人”,专门记录小数据的每一步人生足迹:

    [时间:2024-12-25 09:00:00] 创建订单:订单号 1001,状态:待发货

    ​ 小数据兴奋极了:“我的人生从这里被记录下来啦!”

  • KvStore(仓库): KvStore 是分拣中心的“仓库管理员”,专门保存小数据的状态和内容,以备后续查询。KvStore 给小数据安排了个“货架”:

    货架位置:东区仓库 001,数据状态:待发货

​ “好耶!”小数据开心地在自己的货架上安顿下来。


4. 人生中的更新(LogStore + KvStore:我的状态变了!)

就在 9:30,小数据的人生迎来了第一个重要的“更新”。妈妈小明得到了快递信息:“您的订单已发货!”

于是,小数据的状态从“待发货”更新为“已发货”。分拣中心马上展开协作:

  1. LogStore 记录变更: LogStore 再次记录下小数据的人生足迹:

    [时间:2024-12-25 09:30:00] 更新状态:已发货
  2. KvStore 更新状态: KvStore 将仓库里的数据替换为最新状态:

    货架位置:东区仓库 001,数据状态:已发货

小数据感叹:“原来我的人生是可以改写的!”


5. 跨仓储的挑战(ZooKeeper:保持系统秩序)

东区分拣中心最近有点忙,有些数据开始超载。就在这时,Fluss 的 “通信协调员”(ZooKeeper)站了出来:“不用慌!一切有我协调。”

ZooKeeper 通知总部,将一部分数据任务转移到北区的分拣中心,以确保整个系统的平稳运行。小数据惊叹:“原来我有这么多后备选项!”


6. 历史的归宿(Remote Storage:成为数据档案)

随着时间的推移,越来越多的数据涌入东区分拣中心,小数据意识到它的时代要结束了。

为了让分拣中心有更多存储空间,小数据和它的伙伴们被转移到了 远程云存储(Remote Storage)。这就像是档案馆,它保存了所有历史数据。

“虽然我不再活跃,但我的人生还会被查阅!未来的人们可以分析我。”小数据在档案馆安然入眠。


7. 被召唤的高光时刻(查询 + 分析)

就在小数据以为自己会默默无闻地躺着时,突然,一条查询指令将它唤醒:

SELECT status FROM orders WHERE order_id = 1001;

系统快速检索:

  • LogStore 提供了变更日志,追踪它的所有历史记录。
  • KvStore 提供了最终的状态。

小数据以它的最新状态“已发货”再次出现在查询结果中:“原来,我一直在被需要!”

到了年底,Fluss 公司还通过批量分析指令:

SELECT SUM(amount) FROM orders WHERE year(order_time) = 2024;

运营团队惊喜地发现,小数据贡献了 4999 元销售额!“我成了分析中的重要一环!”


Fluss 小数据的一生
组件在故事中的角色功能
Client小数据的出生医院负责接收数据的输入。
CoordinatorServer职业规划师(总部控制中心)负责数据分配、元数据管理、故障恢复。
TabletServer分拣中心负责数据的存储和更新,提供高效查询。
LogStore日志记录员记录所有数据的变更历史,用于流式处理和追踪。
KvStore仓库管理员保存数据的最新状态,支持高效查询和修改。
ZooKeeper系统协调员保证整个系统有序运行,处理分配和调度。
Remote Storage数据档案馆保存历史数据,减轻分拣中心的压力。

专业解释

下面是 Fluss 架构里面这些进程的详细专业解释:

CoordinatorServer

CoordinatorServer 是集群的核心控制和管理组件,主要负责以下任务:

  • 元数据管理:维护元数据。
  • 节点分配管理:管理 Tablet 的分配和节点列表。
  • 权限管理:处理用户和服务权限。

此外,CoordinatorServer 负责以下关键操作:

  • 数据再平衡:在节点扩展或缩减时重新分配数据。
  • 数据迁移:当节点发生故障时,管理数据迁移和服务节点切换。
  • 表管理:创建或删除表,更新桶(Bucket)的数量。

CoordinatorServer 是整个集群的大脑,确保资源高效分配与无缝管理。


TabletServer

TabletServer 负责数据存储、持久化,并直接为用户提供 I/O 服务。它由以下两个关键组件组成:

  1. LogStore:用于存储日志数据,类似数据库的 binlog(变更日志)。
  2. KvStore:用于存储表数据,支持更新和删除。

不同表类型对应的行为:

  • 主键表(PrimaryKey Table):支持更新操作,使用 KvStore 存储表数据,并使用 LogStore 存储变更日志。
  • 日志表(Log Table):仅支持追加写入,主要依赖 LogStore 优化写入性能。

LogStore
  • 专为存储日志数据而设计,类似于数据库的 binlog。
  • 数据只能追加,不可修改,确保数据完整性。
  • 主要用于低延迟的流式读取,同时作为 KvStore 的预写日志(WAL)。

KvStore
  • 用于存储表格化数据,支持高效的查询、更新和删除操作。
  • 生成完整的变更日志以追踪数据修改。
  • 适用于需要频繁数据操作的场景。

Tablet / Bucket
  • 数据根据桶策略分为多个桶(Bucket)。
  • 每个 Tablet 包含 LogTablet 和(可选的)KvTablet,具体取决于表是否支持更新。
  • Tablet 通过复制(Replication)机制确保高可用性。
  • 注意:目前,KvTablet 不支持复制。

ZooKeeper
  • Fluss 当前使用 ZooKeeper 进行集群协调、元数据存储和配置管理。
  • 未来版本中,计划用 KvStore 替代 ZooKeeper 的元数据存储功能,并使用 Raft 协议实现集群协调和一致性。

远程存储(Remote Storage)

远程存储主要有两个用途:

  1. 分层存储(LogStores):
    • 减少 LogStore 数据的存储成本。
    • 加速扩展操作。
  1. 持久化存储(KvStores):
    • 为 KvStore 提供持久化存储。
    • 与 LogStore 协作,实现故障恢复。

未来计划支持批量写入操作,优化数据导入流程并提高性能。


客户端(Client)

Fluss 提供的客户端/SDK 支持以下操作:

  • 流式读写
  • 批量读写
  • 数据定义语言(DDL)操作
  • 主键点查(Point Queries)

目前,主要的客户端实现是 Flink Connector,用户可以通过 Flink SQL 轻松操作 Fluss 的表和数据。

写在最后

这篇文章说了Fluss 架构中的服务组件的职能和工作流程,后面会对 Fluss 查询数据湖和本地数据合并部分做讲解。欢迎大家关注 "大圣数据星球"一起来讨论大数据技术。

本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/65238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode82:删除链表中的重复元素II

原题地址:82. 删除排序链表中的重复元素 II - 力扣(LeetCode) 题目描述 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入&…

【面试经典】多数元素

链接:169. 多数元素 - 力扣(LeetCode) 解题思路: 在本文中,“数组中出现次数超过一半的数字” 被称为 “众数” 。 需要注意的是,数学中众数的定义为 “数组中出现次数最多的数字” ,与本文定…

AT24C02学习笔记

看手册: AT24Cxx xx代表能写入xxK bit(xx K)/8 byte 内部写周期很关键,代表每一次页写或字节写结束后时间要大于5ms(延时5ms确保完成写周期),否则时序会出错。 页写:型不同号每一页可能写入不同大小的…

蓝牙BLE开发——解决iOS设备获取MAC方式

解决iOS设备获取MAC方式 uniapp 解决 iOS 获取 MAC地址,在Android、iOS不同端中互通,根据MAC 地址处理相关的业务场景; 文章目录 解决iOS设备获取MAC方式监听寻找到新设备的事件BLE工具效果图APP监听设备返回数据解决方式ArrayBuffer转16进制…

01 Oracle 基本操作

Oracle 基本操作 初使用步骤 1.创建表空间 2.创建用户、设置密码、指定表空间 3.给用户授权 4.切换用户登录 5.创建表 注意点:oracle中管理表的基本单位是用户 文章目录 了解Oracle体系结构 1.创建表空间**2.删除表空间**3.创建用户4.给用户授权5.切换用户登录6.表操…

独一无二,万字详谈——Linux之文件管理

Linux文件部分的学习,有这一篇的博客足矣! 目录 一、文件的命名规则 1、可以使用哪些字符? 2、文件名的长度 3、Linux文件名的大小写 4、Linux文件扩展名 二、文件管理命令 1、目录的创建/删除 (1)、目录的创建 ① mkdir…

rust windwos 两个edit框

use winapi::shared::minwindef::LOWORD; use windows::{core::*,Win32::{Foundation::*,Graphics::Gdi::{BeginPaint, EndPaint, PAINTSTRUCT},System::LibraryLoader::GetModuleHandleA,UI::WindowsAndMessaging::*,}, };// 两个全局静态变量,用于保存 Edit 控件的…

解锁成长密码:探寻刻意练习之道

刻意练习,真有那么神? 在生活中,你是否有过这样的困惑:每天苦练英语口语,可一到交流时还是支支吾吾;埋头苦学吉他,却总是卡在几个和弦转换上;工作多年,业务能力却似乎陷入…

WPS中如何为指定区域的表格添加行或者列,同时不影响其它表格?

大家好,我是小鱼。 日常工作中会遇到这种情况:在一个Excel工作表中有多个表格,因为后期数据量增加就需要为指定区域的表格添加行或者列,但是不能影响其它表格。这种情况下我们应该怎么操作呢? 为指定区域的表格添加行…

Gitlab17.7+Jenkins2.4.91实现Fastapi项目持续发布版本详细操作(亲测可用)

一、gitlab设置: 1、进入gitlab选择主页在左侧菜单的下面点击管理员按钮。 2、选择左侧菜单的设置,选择网络,在右侧选择出站请求后选择允许来自webhooks和集成对本地网络的请求 3、webhook设置 进入你自己的项目选择左侧菜单的设置&#xff…

模型工作流:自动化的模型内部三角面剔除

1. 关于自动减面 1.1 自动减面的重要性及现状 三维模型是游戏、三维家居设计、数字孪生、VR/AR等几乎所有三维软件的核心资产,模型的质量和性能从根本上决定了三维软件的画面效果和渲染性能。其中,模型减面工作是同时关乎质量和性能这两个要素的重要工…

Unity微信小游戏接入开放数据域

demo地址:https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/tree/main/Demo/Ranking 官方说明: https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/blob/main/Design/OpenData.md 准备一个Canvas&#xff0c…

如何实现 MySQL 的读写分离?

面试题 你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题? 面试官心理分析 高并发这个阶段,肯定是需要做读写分离的,啥意思&#x…

go window安装protoc protoc生成protobuf文件

1. 下载: Releases protocolbuffers/protobuf GitHub 2. 解压缩: 3. 配置环境变量: 选择系统变量->Path -> 新增 解压缩后的bin路径 4. 打印版本: protoc --version 5. 安装protoc-gen-go cmd 下输入安装命令&#xff0…

学习C++:标识符命名规则

标识符命名规则: 作用:C规定给标识符(变量、常量)命名时,有一套自己的规则 标识符不能是关键字 标识符只能由字母、数字、下划线组成 第一个字符必须为字母或下划线 标识符中字母区分大小写 (给标识符命…

Linux系统程序设计--6.线程

线程基本概念 刚创建的进程默认有一个线程&#xff0c;成为主控线程(主线程) Linux线程实现 线程标识 Linux线程的创建和终止 pthread_create 龟兔赛跑案例 #include<stdio.h> #include<stdlib.h> #include<pthread.h> #include<math.h>void * th_fn…

5G学习笔记之Non-Public Network

目录 0. NPN系列 1. 概述 2. SNPN 2.1 SNPN概述 2.2 SNPN架构 2.3 SNPN部署 2.3.1 完全独立 2.3.2 共享PLMN基站 2.3.3 共享PLMN基站和PLMN频谱 3. PNI-NPN 3.1 PNI-NPN概述 3.2 PNI-NPN部署 3.2.1 UPF独立 3.2.2 完全共享 0. NPN系列 1. NPN概述 2. NPN R18 3. 【SNPN系列】S…

DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(1)

DevOps实战&#xff1a;用Kubernetes和Argo打造自动化CI/CD流程&#xff08;1&#xff09; 架构 架构图 本设计方案的目标是在一台阿里云ECS服务器上搭建一个轻量级的Kubernetes服务k3s节点&#xff0c;并基于Argo搭建一套完整的DevOps CI/CD服务平台&#xff0c;包括Argo CD…

清空DNS 缓存

如果遇到修改了host文件&#xff0c;但是IP和域名的映射有问题的情况&#xff0c;可以尝试刷新DNS缓存。 ipconfig/flushdns win建加R建&#xff0c;然后输入cmd&#xff0c;然后回车 然后回车&#xff0c;或者点击确定按钮。 出现如下所示标识清空DNS 缓存成功。

计算机伦理与职业规范1:计算的社会背景

1 第一个阶段&#xff1a;为战争而发展的计算机器 1.1 问题描述 面对全球冲突&#xff0c;一帮数学家开始致力于尽可能快地解决复杂数学问题。冲突双方都会通过无线电发送命令和战略信息&#xff0c;而这些信号也可能被敌方截获。为了防止信息泄露&#xff0c;军方会对信号进…