从一到无穷大 #23 《流计算系统图解》书评

在这里插入图片描述本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。

文章目录

  • 引言
  • 内容
  • 总结

引言

春节假期回到家里断然是不会有看纸质书的时间的。造化弄人,二月三号早上十一点的飞机延误到一点多,原本三小时不到的阅读时间延长为五个小时,也给了我看完这本书的机会。

第一次了解到这本书是Tison在朋友圈发了他写的书评[2],开头便是:

值得一读,尤其是对开始开发流计算任务或系统一到两年,初步实现过一些功能或作业,但是还没有对流式系统建立起系统认识的开发者。

Tison参与开源的起家项目就是Flink。而我对于流计算系统接触起源于时序数据库的流式计算(降采样),时序数据的以目前使用的场景来看,绝大多数还是把分钟/秒级别数据基于SQL规则降维度/不降维度(对应group by tag/*)到小时/天级别,这样的需求大多数决策者会在写入链路上加一个Flink/Spark,将数据本身处理后写入时序数据库,这也导致业务成本上相当一部分是在Flink/Spark上的。

我们可以看到TDengine的官网上将缓存、流计算,数据订阅以及时序数据库的功能闭环在TDengine内部,并将此作为卖点之一,核心是为了降低系统设计复杂度和运行成本,并标榜自己为时序大数据处理平台。

在这里插入图片描述
我对于流计算系统的浅薄了解便来自于这里。事实上TDengine包括我们的实现标榜为流计算系统并不完全正确,准确的说应该窗口仅为时间,无状态的,且非DAG的简化批处理系统,但是这样的场景对于目前绝大多数需求完全够用,因为目的是为了加速查询而不是给业务赋能。

我参与了腾讯新一代时序数据库从立项到上云的全过程,并实现了对于系统内部简化流计算能力的支持,所以非常符合“开始开发流计算任务或系统一到两年,初步实现过一些功能或作业”的人的,这也是读这本书的主要原因。

在开始书评之前,以TDengine这张图为背景,我以我浅薄的知识评价下在决策者的角度我会怎样使用时序数据库。

  1. 首先我认为时序数据库的流式计算能力是可以解决时序场景中的绝大多数分析需求的,所以我愿意尝试这里的能力。但是对于是否降本我持怀疑态度,因为系统内部执行流计算系统需要大量的内存,尤其是在流计算任务较多时(每个measurement一个,这个数字会极度膨胀),这个时候扩容成了唯一的方法,如果只按照读写的能力去申请资源,加上流计算的资源消耗存在内存风险。但也并不是没有显而易见的好处,即数据库自治,绝大多数情况只有数据库自己知道该如何较优构建降采样和流计算。
  2. kafka的钱是省不了的,这是系统的最后兜底,假如我是一个CEO不可能把我身家性命放在“时序大数据处理平台”的,而且业务数据还需要做更高级的分析需求(降维度,接入用户内部分析系统等),时序数据库的流计算短期能很难看到超越专业流计算系统的可能,所以接受到业务数据后架一个kafka是必要的。
  3. Cache功能完全可以集成到时序数据库内部,这里有两个场景,1. 系统需要快速将最新数据返回给应用程序 2. 相同sql数据缓存,实际查询只查询两次sql的时间差值内的数据,减少CPU/内存消耗;时序数据库集成这些功能是完全可行的,对于我们开发的多模数据库,可以在用户的资源内起一个SSD Redis db,存储大量数据在SSD中,在增加了存储利用率的同时减少了用户查询时延。

内容

若河床上没有岩石,溪流就不会有歌声

第一章阐述了应用程序,后台服务,批处理系统,流处理系统之间的区别,并讨论多阶段架构,为后续引出DAG做铺垫。

先解决问题,再编写代码

第二章引入收费站的例子,指出基于Web服务构建存在流量增加时请求延迟引发了系统迟滞,导致结果不准确的问题,因而引出使用流系统,并指出流系统的核心概念由事件,作业,源,算子和流构成,处理引擎由源执行器,算子执行器和作业启动器构成。

九个人不可能再一个月造出一个孩子

第三章介绍了并行化和数据分组,这可以解决分布式系统的一个根本挑战,即如何扩展系统以增加吞吐量,或者说如何在更短的时间处理更多的数据。并行化包含数据并行和任务并行,前者含义为将一个任务的不同子集交给不同的执行单元,后者含义为在不同的数据上运行相同的任务。章节的后续引入事件分发器,并提出分组概念,为了下游组件可以高效的并行处理上游事件,这和kafka中的partition概念基本一致。

糟糕的程序员担心代码,优秀的程序员担心数据结构和它们之间的关系

第四章引入欺诈检测的case,与之前不同,这时的流并不是一条直线,在数据源之后需要执行多种检测,这就引出了DAG,并解释了算子的扇入扇出,同时指出扇出时发出的事件可以只被推送到某些输出队列中,此外不同的输出队列中可能拥有不同的数据。

人们从来没有足够的时间去做正确的事情,但总有足够的时间去重做一遍

第五章介绍了送达语义,即至多一次(At-Most Once)、至少一次(At-Least Once)和恰好一次(Exactly Once),并指出Exactly Once需要重试和幂等来保证。在我们的时序系统中实现了kafka ingest,需要接受用户写入kafka的数据,并高效的写入引擎,这里开始我们使用autoCommit,这就是经典的至多一次,但是存在数据丢失风险,后来我们使用手动管理offset,保证在实际写入成功后再提交offset,但这依旧只能保证至少一次,真正的恰好一次是靠时序数据库本身的幂等保证的。

技术使人们能够控制除了技术以外的一切

第六章是对前五章的总结。

计算机能集中注意力的时间只和它的电源线一样长

第七章讨论了窗口计算和窗口水位;前者讨论了固定窗口,滑动窗口和会话窗口,并指出可以使用外部系统来完善窗口算子;其次提到乱序数据的到达需要设置窗口水位,一般情况下维持多个窗口开销较大,以目前的经验用户通常可以接受丢弃这部分数据。Tison提到The Dataflow Model 是 Google 流计算的经典论文,Dataflow 模型的开山之作,简单浏览了一下文章内容,窗口水位部分对应文章中:

  1. When in processing time they are materialized ?
  2. How earlier results relate to later refinements ?

这里我还想讨论下目前公有云监控的实时性问题,腾讯云上目前分钟监控在120s内,秒监控在12s以内,这个值是怎么得到的呢?时序数据本质上也可以看作一个有界的数据流,分钟级别监控可以认为是窗口为时间的数据,在这种情况下首先存在一个攒数据的过程,因为不确定数据实在一分钟的哪一秒到达,这就60s了,在加上上报存在失败,在最后1s失败时允许重试,最后就是时序数据库内写入的削峰,这些加起来产品给出了120s的保证。

一个SQL查询来到酒吧,走到两张桌子(table)前问道:我能加入(join)你们吗

第八章讨论JOIN。书中把join当作一种特殊的扇入方式,并提出流必须转化为表才可以执行join,同时讨论了双流join中首先基于窗口物化流,其次再join。这一节的内容在我们的流系统中无法使用,但是在流式查询引擎中还是有理论指导意义的,首先基于窗口截取,其次再合并返回。

永远不要相信一台你无法扔出窗口的计算机

第九章讨论了流系统中广泛支持的故障处理机制,即反压,一种与数据流向相反的压力。因为流是源源不断的,如果存在某个模块出现预期之外的情况,问题很快会传播到其他组件,导致系统崩溃,反压就是最后一道防线,
具体介绍了如何判断繁忙状态与如何执行反压,前者我认为与系统相关,后者的处理是通用的,1. 停止数据源 2. 停止上游组件 并需要考虑如何解除反压状态让系统恢复。

且反压需要区分事件,比如实例宕机或者消费能力不足,这两者靠自身都是无法恢复的,需要拉起实例和增加资源,书中还提到一种特殊的case,即持续触发反压,这会造成整个系统的抖动。

这一章对我来说最大的意义在于从理论上确定了在流系统上思考极端情况是有理论基础的,在我们的实现流计算过程中就遇到过类似的问题,比如WAL拉取导致计算节点CPU暴增处理包变慢,存储节点累计大包,出现大范围OOM;其次还有在均衡操作触发时存在消费老数据的情况,造成CPU激增,影响其他组件;这些其实都是没有考虑反压的情况。

对于如何判断繁忙状态与如何执行反压,前者可以通过统计CPU/内存来做,后者可以选择停止输入和丢弃,工程上不同的场景在监控上需要可以体现。

重启试试

第十章讨论了有状态计算,这同时是Flink的最大价值,即而在于实现了带状态的流计算。这一章主要阐述状态和检查点,即何时持久化状态,书中给出的方法是在数据流中加入检查点,这可以理解为屏障(barrier)。其实以目前我们在时序数据库中实现的流系统来看,最难的点其实在于调度,因为调度的复杂性,我们没有选择有状态的流计算,在出现故障时,选择重放几个窗口的事件,并限制CPU/内存使用。

成功不在于是否曾经摔倒,而在于能否重新站起来

第十一章终章是对七到十章节的总结和展望。

总结

现有的时序数据库只是实现了窗口仅为时间,无状态的,且非DAG的简化批处理系统,想以此替代流系统的全部份额基本不太现实,但是确实可以拿下其中部分收益,领域垂直公司需要故事去活下去,但是公有云需要关注业务上真正需要解决的问题,可见的未来我们的精力不会投入到完善时序的流计算系统中去。

参考:

  1. 大图书馆 #8 流式系统阅读指南
  2. 大图书馆 #9 《流计算系统图解》书评
  3. 支持消息队列和流式计算背后,TDengine 3.0 存储引擎的优化与升级
  4. DolphinDB教程:流数据时序引擎
  5. 一文学会如何使用 TDengine 3.0 中的流式计算
  6. 支持消息队列和流式计算背后,TDengine 3.0 存储引擎的优化与升级
  7. Naiad:A Timely Dataflow System
  8. 论文阅读-Naiad:A Timely Dataflow System
  9. The Dataflow Model: A Practical Approach to Balancing Correctness, Latency, and Cost in Massive-Scale, Unbounded, Out-of-Order Data Processing
  10. 大数据理论篇 - 通俗易懂,揭秘谷歌《The Dataflow Model》的核心思想(一)

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

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

相关文章

HCIA--ACL和远程登陆实验

1.划分网段,配IP地址,启用OSPF协议: AR1配置: [Huawei]sys R1 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 192.168.1.1 24 [R1-GigabitEthernet0/0/0]int g0/0/1 [R1-GigabitEthernet0/0/1]ip add 12.1.1.1 24 [R1-Gigabi…

STM32的ADC电压采集

时间记录:2024/2/9 一、ADC相关知识点 (1)STM32的ADC时钟不要超过14MHz,不然结果的准确率将下降 (2)ADC分为规则组和注入组,规则组相当于正常运行的程序,注入组相当于中断可以打断…

贵金属交易包括哪些?香港有哪些贵金属交易平台?

随着金融市场的不断发展,贵金属交易作为一种投资方式,越来越受到投资者的关注。贵金属交易不仅具有投资价值,还能够为投资者提供规避风险和保值的工具。本文将介绍贵金属交易的种类和香港的贵金属交易平台。 一、贵金属交易的种类 贵金属交…

算法——数论——GCD和LCM

目录 GCD(最大公约数) 1、欧几里得算法 LCM(最小公倍数) 一、试题 算法训练 抗击虫群 GCD(最大公约数) 整数 a 和 b 的最大公约数是指能同时整除 a 和 b 的最大整数,记为 gcd(a,b)-a的因子和…

为什么在产品设计和制造过程中要采用FMEA——SunFMEA软件

在产品设计和制造过程中,FMEA是一种非常重要的工具,用于评估潜在的故障模式及其对产品性能的影响。通过分析产品设计或流程中可能出现的故障模式,并评估其对产品性能和客户满意度的潜在影响,来预测和防止产品在生产和运行过程中出…

火星符号运算 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 已知火星人使用的运算符号为 #和$ 其与地球人的等价公式如下 x#y2*x3*y4 x$y3*xy2x y是无符号整数。地球人公式按照c语言规则进行计算。火星人公式中&#xff0…

心情切换器(仅供娱乐)

本次分享主要内容较为新奇&#xff0c;作用程度可以说没用&#xff0c;仅供娱乐(注&#xff1a;本次成果使用的为vue框架实现) 一、静态及呈现图 <div class"switchMood"><h2>心情转换器</h2><!--输入当前心情表单--><div class"fr…

LM403-Pro-Kit数据手册

如上图所示&#xff0c;LM403-Pro-Kit评估板由ST-LINK、跳线、LM403模组、按键、LED以及天线接口等组成。 USB连接PC即可以在线仿真、下载和串口打印调试输出、输入操作。 电源开关 控制LM403模组的电源与LDO的3.3V的通断。 MicroUSB 板子供电及ST-LINK与PC机连接的接口。 S…

Java多线程:线程安全

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、线程状态1、New&#xff08;初始状态&#xff09;2、Terminated&#xff08;终止状态&#xff09;3、Runnable&#xff08;…

以管理员权限删除某文件夹

到开始菜单中找到—命令提示符—右击以管理员运行 使用&#xff1a;del /f /s /q “文件夹位置” 例&#xff1a;del /f /s /q "C:\Program Files (x86)\my_code\.git"

Flink从入门到实践(二):Flink DataStream API

文章目录 系列文章索引三、DataStream API1、官网2、获取执行环境&#xff08;Environment&#xff09;3、数据接入&#xff08;Source&#xff09;&#xff08;1&#xff09;总览&#xff08;2&#xff09;代码实例&#xff08;1.18版本已过时的&#xff09;&#xff08;3&…

《MySQL 简易速速上手小册》第9章:高级 MySQL 特性和技巧(2024 最新版)

文章目录 9.1 使用存储过程和触发器9.1.1 基础知识9.1.2 重点案例&#xff1a;使用 Python 调用存储过程实现用户注册9.1.3 拓展案例 1&#xff1a;利用触发器自动记录数据更改历史9.1.4 拓展案例 2&#xff1a;使用 Python 和触发器实现数据完整性检查 9.2 管理和查询 JSON 数…

VBA技术资料MF117:测试显示器大小

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

图论与图数据应用综述:从基础概念到知识图谱与图智能

目录 前言1 图论基础概念1.1 节点度1.2 度分布1.3 邻接矩阵 2 探索图的高级概念2.1 最短路径的关键性2.2 图的直径与平均路径的意义2.3 循环与路径类型的多样性 3 深入探讨图的广泛应用领域3.1 知识图谱的知识管理3.2 图智能在复杂决策中的应用3.3 图数据挖掘与分析的多领域应用…

[C#]winform制作仪表盘好用的表盘控件和使用方法

【仪表盘一般创建流程】 在C#中制作仪表盘文案&#xff08;通常指仪表盘上的文本、数字或指标显示&#xff09;涉及到使用图形用户界面&#xff08;GUI&#xff09;组件&#xff0c;比如Windows Forms、WPF (Windows Presentation Foundation) 或 ASP.NET 等。以下是一个使用W…

APEX开发过程中需要注意的小细节2

开发时遇到首次获取租户号失败的问题 以为是触发顺序问题&#xff0c;所以设置两个动态操作&#xff0c;一个事件是“更改”&#xff0c;另一个是“单击”&#xff0c; 但还是没有解决&#xff0c; 后来终于找到解决方法:在校验前执行取值 果然成功执行&#xff01; 动态查询年…

Zookeeper集群搭建(3台)

准备工作 1、提前安装好hadoop102、hadoop103、hadoop104三台机器&#xff0c;参照&#xff1a;CentOS7集群环境搭建&#xff08;3台&#xff09;-CSDN博客 2、提前下载好Zookeeper安装包并上传到/opt/software上、安装包&#xff0c;链接&#xff1a;https://pan.baidu.com/…

图书系统的Web实现(含源码)

源码地址https://gitee.com/an-indestructible-blade/project 注意事项&#xff1a; BorrowBooksWeb\src\main\resources路径下的application.yml文件里面的url&#xff0c;username&#xff0c;password这三个属性和自己的数据库保持一致。 浏览器访问url:http://127.0.0.1:…

软考 系统分析师系列知识点之信息系统战略规划方法(4)

接前一篇文章&#xff1a;软考 系统分析师系列知识点之信息系统战略规划方法&#xff08;3&#xff09; 所属章节&#xff1a; 第7章. 企业信息化战略与实施 第4节. 信息系统战略规划方法 7.4.2 关键成功因素法 关键成功因素&#xff08;Critical Success Factors&#xff0c…

Unity3D学习之UI系统——UGUI

文章目录 1. 前言2 六大基础组件概述3 Canvas——渲染模式的控制3.1 Canvas作用3.2 Canvas的渲染模式3.2.1 Screen Space -Overlay 覆盖模式3.2.2 Screen Space - Camera 摄像机模式3.2.3 World Space 4 CanvasScaler ——画布缩放控制器4.1 Constant Pixel Size 恒定像素模式4…