当前位置: 首页 > news >正文

读构建可扩展分布式系统:方法与实践14流处理系统

1. 流处理系统

1.1. 时间就是金钱

  • 1.1.1. 从数据中提取有价值的知识和获得洞见的速度越快,就能越快地响应系统所观察的世界的变化

  • 1.1.2. 信用卡欺诈检测

  • 1.1.3. 网络安全中异常网络流量的捕获

  • 1.1.4. 在支持GPS的驾驶应用程序中进行的实时路线规划

  • 1.1.5. 社交媒体网站上的热门话题识别

1.2. 需要对最近的一组观察结果进行计算

  • 1.2.1. 此类计算对时间很敏感,需要访问最近的相关数据

1.3. 传统上,可以通过将外部提供的数据保存到数据库并设计可提取所需信息的查询来构建此类应用程序

1.4. 需要从数据库和索引中获得快速、可扩展的写入性能,来实现低延迟聚合读取和最近数据点的连接

  • 1.4.1. 有时“终于”是在漫长的等待之后到来的,在当今世界,迟到的结果(即使迟到几秒钟)与根本没有结果一样糟糕

1.5. 面对来自传感器、设备和用户的海量数据源的数量不断增加,我们出现了一种被称为流处理系统的新技术

  • 1.5.1. 流处理系统旨在提供在内存中处理数据流的能力,而无须通过持久化数据来获得所需的结果

  • 1.5.2. 动态数据或实时分析

1.6. 流处理平台正在成为可扩展系统的常见部分

1.7. 流系统产生实时相关结果的能力在许多应用领域都极具吸引力

  • 1.7.1. 可以实时转换、聚合和分析传入的数据

  • 1.7.2. 应用程序可以根据时间窗口或消息量对有限批次的数据执行分析

  • 1.7.3. 使得识别数据趋势并根据最新数据窗口中的值计算指标成为可能

1.8. 利用许多流平台来构建可容错、可扩展的应用程序

  • 1.8.1. 可扩展性是通过将逻辑数据流应用程序架构转换为一个集群中与之物理等价的跨计算资源分布和连接的处理节点来实现的

  • 1.8.2. 容错机制持久保存处理节点的状态并跟踪哪些消息已通过完整的数据流应用程序成功处理

    • 1.8.2.1. 当发生故障时,可以从第一个未完成的消息重新启动流

2. 流处理简介

2.1. 自从软件系统问世以来,批处理就在处理新的可用数据方面发挥了重要作用

  • 2.1.1. 批处理是大型系统的一个可靠有效的重要组成部分

  • 2.1.2. 缺点是新数据从到达到可用于查询和分析存在时间差

2.2. 在批处理系统中,代表新的和更新后的对象的原始数据会被累积到文件中

2.3. 一个被称为批处理数据加载任务的软件组件会定期处理这些新的可用数据,并将其插入应用程序的数据库中

  • 2.3.1. 称为ETL(提取、转换、加载)流程

  • 2.3.2. ETL的意思是处理包含新数据的批处理文件,将数据聚合并转换为适合插入存储层的格式

2.4. 流系统可以实时处理新数据和事件

  • 2.4.1. 使用支持向量机等快速统计模型预测技术来评估交易是否具有潜在欺诈性

  • 2.4.2. “实时”高度依赖于应用程序,处理延迟可能从不到一秒至几秒不等

  • 2.4.3. 流系统也可以对一批批的或一个个窗口的新数据进行处理

    • 2.4.3.1. 微批次

2.5. 批处理和流处理架构,以及像Lambda架构这样的混合架构在现代可扩展系统中都有自己的地位

2.6. Lambda架构

  • 2.6.1. 诞生于2011年左右,作为一种结合了传统批处理和新兴流处理方法的混合体

  • 2.6.2. 批处理层

    • 2.6.2.1. 该层定期处理大量新事件数据并更新应用程序的数据库

    • 2.6.2.2. 在Lambda刚出现时,用于可扩展批处理的主导技术是Apache Hadoop

    • 2.6.2.3. 与任何批处理系统一样,数据库更新频率大约为几分钟到几小时,具体取决于批处理的频率

  • 2.6.3. 速度层

    • 2.6.3.1. 该层通过处理新到达的事件以提供低延迟结果来补充批处理层

    • 2.6.3.2. 定期批处理的数据正在累积时,速度层会处理相关事件,从而能快速了解最新的数据

    • 2.6.3.3. 将速度层视为处理新数据和服务层更新造成的高延迟补偿

    • 2.6.3.4. Apache Storm是一种广泛用于速度层的技术

  • 2.6.4. 服务层

    • 2.6.4.1. 该层是批处理层和速度层存储结果的地方,它负责处理查询和生成结果

    • 2.6.4.2. 结果可以基于批处理层或速度层的输出,或基于将两者结合的计算结果

3. 流处理平台

3.1. 数据通常是队列或者分布式存储系统中的文件

3.2. 流处理节点从数据源中提取数据对象并执行转换、聚合和特定于应用的业务逻辑

  • 3.2.1. 节点被组织为有向无环图(DAG)

  • 3.2.2. 来自数据源的数据对象作为流来处理

  • 3.2.3. 数据流是单个数据对象的无限序列

3.3. 在概念上,数据对象是在处理节点之间传递或流动的,因此流应用程序也被称为数据流系统

3.4. 流处理系统为处理节点提供了将一个节点处的输入流转换为由一个或多个下游节点处理的新流的能力

3.5. 流处理应用程序有两种常见的风格

  • 3.5.1. 简单地处理和转换流中的单个事件,不需要每个事件的任何上下文或状态

  • 3.5.2. 有些流应用程序需要维护在处理流中各个数据对象的过程中持续存在的状态

    • 3.5.2.1. 有状态流应用程序

3.6. 流处理平台需要能够使应用程序扩展处理能力以及具备故障快速恢复的能力

  • 3.6.1. 通常通过跨计算资源集群执行多个处理节点实例,并实现状态检查点机制以支持故障恢复来实现

3.7. Apache Storm是一个功能强大且可扩展的流处理平台

4.1. 诞生于2014年,基于European Union Stratosphere项目中的原始研究

4.2. Flink的核心是一个分布式流处理系统,专为高吞吐量和低延迟而设计

  • 4.2.1. Flink提供了一组操作,用于过滤、聚合、映射和连接来自数据源的数据流

  • 4.2.2. 与明确定义的Apache Storm拓扑不同,Flink程序被编译并自动转换为可以部署在集群计算环境中的数据流程序

4.3. Flink还支持两种基于关系概念的API,即Table和SQL API

4.4. Data Stream API

  • 4.4.1. Flink DataStream API为Java和Scala系统提供流处理功能

  • 4.4.2. 可以利用丰富的流处理操作来拆分、过滤、聚合和转换事件流,并使用有界时间窗口创建周期性的批处理流事件

  • 4.4.3. 在Flink中,数据流是类型化事件流的逻辑表示,即Java中的DataStream<T>

  • 4.4.4. Flink支持包括文件在内的多种本地数据源,并具有用于各种外部技术的连接器

  • 4.4.5. 窗口操作定义了有限的事件集合的边界并对这组事件执行操作

4.5. 可扩展性

  • 4.5.1. Flink程序会被转换成一个逻辑DAG(有向无环图)​

  • 4.5.2. 数据流通过代码中定义的转换从源移动到接收器

  • 4.5.3. 可以使用执行环境对象为程序中的所有算子、数据源和数据接收器指定默认的并行度级别

  • 4.5.4. 常见的策略是分配与每个任务管理器节点上可用CPU内核相同数量的插槽

  • 4.5.5. Flink实现了一个复杂的转换算法,将逻辑DAG映射到可用的物理资源

    • 4.5.5.1. 包括了算子链的优化,将算子并置在单个任务槽中,最大限度地减少数据通信成本

4.6. 数据安全

  • 4.6.1. 故障处理是任何流处理系统都需要考虑的问题

  • 4.6.2. 如果部署的一部分流应用程序由于某个节点崩溃、网络故障或应用程序异常而发生故障,保存在内存中的任何状态都会丢失

  • 4.6.3. 两种支持数据安全的机制

    • 4.6.3.1. 持久化状态存储和定期为完整流调用检查点
  • 4.6.4. 需要配置有状态的算子以定期将其状态保存为键值对

    • 4.6.4.1. 所有算子的快照都是基于对来自流源的完全相同的输入事件的处理
  • 4.6.5. 持久存储使得在流处理失败的情况下可以从快照恢复状态

  • 4.6.6. Flink使用流屏障(stream barrier)确保快照是一致的

    • 4.6.6.1. 一旦屏障在所有输入上传递到流接收器,检查点就被标记为完成

    • 4.6.6.2. 检查点可以有效提高Flink应用程序的容错能力

  • 4.6.7. Flink通过配置各种参数来控制何时触发检查点

    • 4.6.7.1. 一个经常使用的参数是检查点之间的最短时间间隔

相关文章:

读构建可扩展分布式系统:方法与实践14流处理系统

1. 流处理系统 1.1. 时间就是金钱 1.1.1. 从数据中提取有价值的知识和获得洞见的速度越快,就能越快地响应系统所观察的世界的变化 1.1.2. 信用卡欺诈检测 1.1.3. 网络安全中异常网络流量的捕获 1.1.4. 在支持GPS的驾驶应用程序中进行的实时路线规划 1.1.5. 社交…...

C++第2课——取余运算符的应用、浮点型和字符型(含视频讲解)

文章目录 1、课程笔记2、课程视频 1、课程笔记 /* #include<iostream> using namespace std; int main(){//cout<<"hello,world!";//运算符的优先级 () * / % -// 3/2 1...1 3%21 5%32 3%53 -3%2-1 3%-21//cout<<6/4%2;//int 向下取整6…...

SQL常用技巧总结

查询优化基本准则 1、ORACLE 的解析器按照从右到左的顺序处理 FROM 子句中的表名&#xff0c;因此 FROM 子句中写在最后的表(基础表 driving table)将被最先处理。 在FROM 子句中包含多个表的情况下&#xff0c;你必须选择记录条数最少的表作为基础表。 例如&#xff1a; 表 T…...

AJAX(简介以及一些用法)

AJAX 1. 简介 什么是 Ajax Ajax 的全称是 Asynchronous JavaScript And XML &#xff08;异步 JavaScript 和 XML &#xff09;我们可以理解为&#xff1a;在网页中 利用 XMLHttpRequest 对象和服务器进行数据交互的方式就是 Ajax &#xff0c;它可以帮助我们轻松实现网页…...

美畅物联丨GB/T 28181系列之TCP/UDP被动模式和TCP主动模式

GB/T 28181《安全防范视频监控联网系统信息传输、交换、控制技术要求》作为我国安防领域的重要标准&#xff0c;为视频监控系统的建设提供了全面的技术指导和规范。该标准详细规定了视频监控系统的信息传输、交换和控制技术要求&#xff0c;在视频流传输方面&#xff0c;GB/T 2…...

机器学习之实战篇——图像压缩(K-means聚类算法)

机器学习之实战篇——图像压缩(K-means聚类算法&#xff09; 0. 文章传送1.实验任务2.实验思想3.实验过程 0. 文章传送 机器学习之监督学习&#xff08;一&#xff09;线性回归、多项式回归、算法优化[巨详细笔记] 机器学习之监督学习&#xff08;二&#xff09;二元逻辑回归 …...

轴承介绍以及使用

轴承&#xff08;Bearing&#xff09;是在机械传动过程中起固定、旋转和减小载荷摩擦系数的部件。也可以说&#xff0c;当其它机件在轴上彼此产生相对运动时&#xff0c;用来降低运动力传递过程中的摩擦系数和保持转轴中心位置固定的机件。 轴承是当代机械设备中一种举足轻重的…...

【JAVA】算法笔记

一、ArrayList ArrayList类是一个可以动态变化的数组&#xff0c;与普通数组的区别就是它没有固定的长度。 ArrayList<String> arrList new ArrayList<String>(); arrList.add("吐泡泡"); System.out.println(arrList.get(0)); arrList.set(0,"J…...

Gnu Radio抓取WiFi信号,流程图中模块功能

模块流程如图所示&#xff1a; GNURadio中抓取WiFi信号的流程图中各个模块的功能&#xff1a; UHD: USRP Source&#xff1a; 使用此模块配置USRP硬件进行信号采集。设置频率、增益、采样率等参数。Complex to Mag^2&#xff1a; 将复数IQ数据转换为幅度的平方。Delay&#xf…...

GO语言中make与new的区别

区别 1 make不仅分配内存&#xff0c;还会初始化。 new只会分配零值填充的值2make只适用slice,map,channel的数据&#xff0c;new 没有限制3make返回原始类型(T),new返回类型的指针(*T) 源码中定义的区别 func make(t Type,size …IntegerType) Type func new(Type) *Type f…...

安全运维类面试题

1、你熟悉哪些品牌的安全设备 答&#xff1a;天融信的ngfw防火墙&#xff0c;老牌防火墙厂商&#xff0c;功能比较齐全&#xff0c;像流量检测&#xff0c;web应用防护和僵木蠕等模块都有&#xff0c;界面是红白配色&#xff0c;设计稍微有点老 2、IPS用的是哪个牌子的 答&…...

STM32外设之LTDC/DMA2D—液晶显示(野火)

文章目录 显示屏有几种?基本参数控制?显存 LTDC 液晶控制器LTDC 结构框图LTDC 初始化结构体 LTDC_InitTypeDefLTDC 层级初始化结构体 DMA2D 图形加速器DMA2D 初始化结构体 要了解什么 屏幕是什么&#xff0c;有几种屏&#xff0c;有什么组成。 怎么控制&#xff0c;不同屏幕控…...

调试vue build之后的js文件

调试 dist 目录下的 JavaScript 文件可以按照以下步骤进行&#xff1a; 1. 确保 Source Maps 正常生成 确认你的构建配置中已启用 Source Maps&#xff0c;确保 .map 文件与构建后的 .js 文件位于同一目录。 2. 启动一个本地服务器 使用本地服务器来服务 dist 目录&#xf…...

Django一分钟:DRF快速实现JWT认证与RBAC权限校验

一、项目创建并实现JWT认证 1. 下载依赖 下载django、djangorestframework、djangorestframework_simplejwt pip install django djangorestframework djangorestframework_simplejwt2. 创建项目 启动Django项目 django-admin startproject <myproject> cd myprojec…...

面试题(六)

48、设计模式 49、继承是否会破坏封装&#xff1f; 继承在面向对象编程中是一个重要的概念&#xff0c;但它确实可能对封装产生影响&#xff0c;具体情况取决于如何使用继承。以下是对这个问题的分析&#xff1a; 封装的定义 封装是面向对象编程中的一个基本原则&#xff0…...

CSS 实现文本溢出省略号显示,含单行与多行文本溢出

&#x1f680; 个人简介&#xff1a;某大型国企资深软件研发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…...

Redis中String命令的基础操作

文章目录 Redis中String命令的基础操作一、引言二、String类型的基础命令1、设置与获取值1.1、SET命令1.2、GET命令 2、字符串操作2.1、APPEND命令2.2、GETRANGE命令2.3、SETRANGE命令2.4、STRLEN命令 3、数值操作3.1、INCR命令3.2、DECR命令3.3、INCRBY和DECRBY命令 三、应用场…...

策略模式+模版模式+工厂模式

工厂模式&#xff1a; &#xff08;1&#xff09;避免类中出现过多的组合依赖 &#xff08;2&#xff09;同时减少代码中出现过多的if...else if...语句 &#xff08;2&#xff09;将调用者跟我们的实现类解耦 模版模式&#xff1a; &#xff08;1&#xff09;功能复用 &…...

云计算平台层(PaaS)指的是什么?常见的应用场景盘点

云计算平台层(PaaS)指的是什么&#xff1f;云计算平台层&#xff08;PaaS&#xff09;&#xff0c;全称PlatformasaService&#xff08;平台即服务&#xff09;&#xff0c;是云计算服务的一种重要模式。为用户提供了一个基于云端的开发和部署环境&#xff0c;允许用户开发、运…...

搜索引擎简介

搜索引擎架构 整个搜索引擎分为三个系统 爬虫系统 索引系统 线上搜素服务 爬虫系统 爬虫分为两个阶段&#xff1a; 第一阶段&#xff1a;根据目标网站的列表页&#xff0c;爬对应的文档 URL 第二阶段&#xff1a;根据文档 URL&#xff0c;下载文档内容 触发器&#xff1…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...