Flink架构、原理

Flink架构、原理,第1张

Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能。

现有的开源计算方案,会把流处理和批处理作为两种不同的应用类型,因为它们所提供的SLA(Service-Level-Aggreement)是完全不相同的:流处理一般需要支持低延迟、Exactly-once保证,而批处理需要支持高吞吐、高效处理。

Flink从另一个视角看待流处理和批处理,将二者统一起来:Flink是完全支持流处理,也就是说作为流处理看待时输入数据流是无界的; 批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。

Flink流处理特性:

Flink以层级式系统形式组件其软件栈,不同层的栈建立在其下层基础上,并且各层接受程序不同层的抽象形式。

1. 流、转换、 *** 作符

Flink程序是由Stream和Transformation这两个基本构建块组成,其中Stream是一个中间结果数据,而Transformation是一个 *** 作,它对一个或多个输入Stream进行计算处理,输出一个或多个结果Stream。

Flink程序被执行的时候,它会被映射为Streaming Dataflow。一个Streaming Dataflow是由一组Stream和Transformation Operator组成,它类似于一个DAG图,在启动的时候从一个或多个Source Operator开始,结束于一个或多个Sink Operator。

2. 并行数据流

一个Stream可以被分成多个Stream分区(Stream Partitions),一个Operator可以被分成多个Operator Subtask,每一个Operator Subtask是在不同的线程中独立执行的。一个Operator的并行度,等于Operator Subtask的个数,一个Stream的并行度总是等于生成它的Operator的并行度。

One-to-one模式

比如从Source[1]到map()[1],它保持了Source的分区特性(Partitioning)和分区内元素处理的有序性,也就是说map()[1]的Subtask看到数据流中记录的顺序,与Source[1]中看到的记录顺序是一致的。

Redistribution模式

这种模式改变了输入数据流的分区,比如从map()[1]、map()[2]到keyBy()/window()/apply()[1]、keyBy()/window()/apply()[2],上游的Subtask向下游的多个不同的Subtask发送数据,改变了数据流的分区,这与实际应用所选择的Operator有关系。

3.任务、 *** 作符链

Flink分布式执行环境中,会将多个Operator Subtask串起来组成一个Operator Chain,实际上就是一个执行链,每个执行链会在TaskManager上一个独立的线程中执行。

4. 时间

处理Stream中的记录时,记录中通常会包含各种典型的时间字段:

Event Time:表示事件创建时间

Ingestion Time:表示事件进入到Flink Dataflow的时间

Processing Time:表示某个Operator对事件进行处理的本地系统时间

Flink使用WaterMark衡量时间的时间,WaterMark携带时间戳t,并被插入到stream中。

5. 窗口

Flink支持基于时间窗口 *** 作,也支持基于数据的窗口 *** 作:

窗口分类:

Tumbling/Sliding Time Window

// Stream of (sensorId, carCnt)

val vehicleCnts: DataStream[(Int, Int)] = ...

val tumblingCnts: DataStream[(Int, Int)] = vehicleCnts

// key stream by sensorId

.keyBy(0)

// tumbling time window of 1 minute length

.timeWindow(Time.minutes(1))

// compute sum over carCnt

.sum(1)

val slidingCnts: DataStream[(Int, Int)] = vehicleCnts

.keyBy(0)

// sliding time window of 1 minute length and 30 secs trigger interval

.timeWindow(Time.minutes(1), Time.seconds(30))

.sum(1)

Tumbling/Sliding Count Window

// Stream of (sensorId, carCnt)

val vehicleCnts: DataStream[(Int, Int)] = ...

val tumblingCnts: DataStream[(Int, Int)] = vehicleCnts

// key stream by sensorId

.keyBy(0)

// tumbling count window of 100 elements size

.countWindow(100)

// compute the carCnt sum

.sum(1)

val slidingCnts: DataStream[(Int, Int)] = vehicleCnts

.keyBy(0)

// sliding count window of 100 elements size and 10 elements trigger interval

.countWindow(100, 10)

.sum(1)

自定义窗口

基本 *** 作:

6. 容错

Barrier机制:

对齐:

当Operator接收到多个输入的数据流时,需要在Snapshot Barrier中对数据流进行排列对齐:

基于Stream Aligning *** 作能够实现Exactly Once语义,但是也会给流处理应用带来延迟,因为为了排列对齐Barrier,会暂时缓存一部分Stream的记录到Buffer中,尤其是在数据流并行度很高的场景下可能更加明显,通常以最迟对齐Barrier的一个Stream为处理Buffer中缓存记录的时刻点。在Flink中,提供了一个开关,选择是否使用Stream Aligning,如果关掉则Exactly Once会变成At least once。

CheckPoint:

Snapshot并不仅仅是对数据流做了一个状态的Checkpoint,它也包含了一个Operator内部所持有的状态,这样才能够在保证在流处理系统失败时能够正确地恢复数据流处理。状态包含两种:

7. 调度

在JobManager端,会接收到Client提交的JobGraph形式的Flink Job,JobManager会将一个JobGraph转换映射为一个ExecutionGraph,ExecutionGraph是JobGraph的并行表示,也就是实际JobManager调度一个Job在TaskManager上运行的逻辑视图。

物理上进行调度,基于资源的分配与使用的一个例子:

8. 迭代

机器学习和图计算应用,都会使用到迭代计算,Flink通过在迭代Operator中定义Step函数来实现迭代算法,这种迭代算法包括Iterate和Delta Iterate两种类型。

Iterate

Iterate Operator是一种简单的迭代形式:每一轮迭代,Step函数的输入或者是输入的整个数据集,或者是上一轮迭代的结果,通过该轮迭代计算出下一轮计算所需要的输入(也称为Next Partial Solution),满足迭代的终止条件后,会输出最终迭代结果。

流程伪代码:

IterationState state = getInitialState()

while (!terminationCriterion()) {

state = step(state)

}

setFinalState(state)

Delta Iterate

Delta Iterate Operator实现了增量迭代。

流程伪代码:

IterationState workset = getInitialState()

IterationState solution = getInitialSolution()

while (!terminationCriterion()) {

(delta, workset) = step(workset, solution)

solution.update(delta)

}

setFinalState(solution)

最小值传播:

9. Back Pressure监控

流处理系统中,当下游Operator处理速度跟不上的情况,如果下游Operator能够将自己处理状态传播给上游Operator,使得上游Operator处理速度慢下来就会缓解上述问题,比如通过告警的方式通知现有流处理系统存在的问题。

Flink Web界面上提供了对运行Job的Backpressure行为的监控,它通过使用Sampling线程对正在运行的Task进行堆栈跟踪采样来实现。

默认情况下,JobManager会每间隔50ms触发对一个Job的每个Task依次进行100次堆栈跟踪调用,过计算得到一个比值,例如,radio=0.01,表示100次中仅有1次方法调用阻塞。Flink目前定义了如下Backpressure状态:

OK: 0 <= Ratio <= 0.10

LOW: 0.10 <Ratio <= 0.5

HIGH: 0.5 <Ratio <= 1

1. Table

Flink的Table API实现了使用类SQL进行流和批处理。

详情参考:https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/table_api.html

2. CEP

Flink的CEP(Complex Event Processing)支持在流中发现复杂的事件模式,快速筛选用户感兴趣的数据。

详情参考:https://ci.apache.org/projects/flink/flink-docs-release-1.2/concepts/programming-model.html#next-steps

3. Gelly

Gelly是Flink提供的图计算API,提供了简化开发和构建图计算分析应用的接口。

详情参考:https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/libs/gelly/index.html

4. FlinkML

FlinkML是Flink提供的机器学习库,提供了可扩展的机器学习算法、简洁的API和工具简化机器学习系统的开发。

详情参考:https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/libs/ml/index.html

明天更新部署与测试

本文仅代表个人的观点,如果阐述的不好欢迎大家指导纠正,在此感激不尽。

Java基础语法

· 分支结构if/switch

· 循环结构for/while/do while

· 方法声明和调用

· 方法重载

· 数组的使用

· 命令行参数、可变参数

IDEA

· IDEA常用设置、常用快捷键

· 自定义模板

· 关联Tomcat

· Web项目案例实 ***

面向对象编程

· 封装、继承、多态、构造器、包

· 异常处理机制

· 抽象类、接口、内部类

· 常有基础API、集合List/Set/Map

· 泛型、线程的创建和启动

· 深入集合源码分析、常见数据结构解析

· 线程的安全、同步和通信、IO流体系

· 反射、类的加载机制、网络编程

Java8/9/10/11新特性

· Lambda表达式、方法引用

· 构造器引用、StreamAPI

· jShell(JShell)命令

· 接口的私有方法、Optional加强

· 局部变量的类型推断

· 更简化的编译运行程序等

MySQL

· DML语言、DDL语言、DCL语言

· 分组查询、Join查询、子查询、Union查询、函数

· 流程控制语句、事务的特点、事务的隔离级别等

JDBC

· 使用JDBC完成数据库增删改查 *** 作

· 批处理的 *** 作

· 数据库连接池的原理及应用

· 常见数据库连接池C3P0、DBCP、Druid等

Maven

· Maven环境搭建

· 本地仓库&中央仓库

· 创建Web工程

· 自动部署

· 持续继承

· 持续部署

Linux

· VI/VIM编辑器

· 系统管理 *** 作&远程登录

· 常用命令

· 软件包管理&企业真题

Shell编程

· 自定义变量与特殊变量

· 运算符

· 条件判断

· 流程控制

· 系统函数&自定义函数

· 常用工具命令

· 面试真题

Hadoop

· Hadoop生态介绍

· Hadoop运行模式

· 源码编译

· HDFS文件系统底层详解

· DN&NN工作机制

· HDFS的API *** 作

· MapReduce框架原理

· 数据压缩

· Yarn工作机制

· MapReduce案例详解

· Hadoop参数调优

· HDFS存储多目录

· 多磁盘数据均衡

· LZO压缩

· Hadoop基准测试

Zookeeper

· Zookeeper数据结果

· 内部原理

· 选举机制

· Stat结构体

· 监听器

· 分布式安装部署

· API *** 作

· 实战案例

· 面试真题

· 启动停止脚本

HA+新特性

· HDFS-HA集群配置

Hive

· Hive架构原理

· 安装部署

· 远程连接

· 常见命令及基本数据类型

· DML数据 *** 作

· 查询语句

· Join&排序

· 分桶&函数

· 压缩&存储

· 企业级调优

· 实战案例

· 面试真题

Flume

· Flume架构

· Agent内部原理

· 事务

· 安装部署

· 实战案例

· 自定义Source

· 自定义Sink

· Ganglia监控

Kafka

· 消息队列

· Kafka架构

· 集群部署

· 命令行 *** 作

· 工作流程分析

· 分区分配策略

· 数据写入流程

· 存储策略

· 高阶API

· 低级API

· 拦截器

· 监控

· 高可靠性存储

· 数据可靠性和持久性保证

· ISR机制

· Kafka压测

· 机器数量计算

· 分区数计算

· 启动停止脚本

DataX

· 安装

· 原理

· 数据一致性

· 空值处理

· LZO压缩处理

Scala

· Scala基础入门

· 函数式编程

· 数据结构

· 面向对象编程

· 模式匹配

· 高阶函数

· 特质

· 注解&类型参数

· 隐式转换

· 高级类型

· 案例实 ***

Spark Core

· 安装部署

· RDD概述

· 编程模型

· 持久化&检查点机制

· DAG

· 算子详解

· RDD编程进阶

· 累加器&广播变量

Spark SQL

· SparkSQL

· DataFrame

· DataSet

· 自定义UDF&UDAF函数

Spark Streaming

· SparkStreaming

· 背压机制原理

· Receiver和Direct模式原理

· Window原理及案例实 ***

· 7x24 不间断运行&性能考量

Spark内核&优化

· 内核源码详解

· 优化详解

Hbase

· Hbase原理及架构

· 数据读写流程

· API使用

· 与Hive和Sqoop集成

· 企业级调优

Presto

· Presto的安装部署

· 使用Presto执行数仓项目的即席查询模块

Ranger2.0

· 权限管理工具Ranger的安装和使用

Azkaban3.0

· 任务调度工具Azkaban3.0的安装部署

· 使用Azkaban进行项目任务调度,实现电话邮件报警

Kylin3.0

· Kylin的安装部署

· Kylin核心思想

· 使用Kylin对接数据源构建模型

Atlas2.0

· 元数据管理工具Atlas的安装部署

Zabbix

· 集群监控工具Zabbix的安装部署

DolphinScheduler

· 任务调度工具DolphinScheduler的安装部署

· 实现数仓项目任务的自动化调度、配置邮件报警

Superset

· 使用SuperSet对数仓项目的计算结果进行可视化展示

Echarts

· 使用Echarts对数仓项目的计算结果进行可视化展示

Redis

· Redis安装部署

· 五大数据类型

· 总体配置

· 持久化

· 事务

· 发布订阅

· 主从复制

Canal

· 使用Canal实时监控MySQL数据变化采集至实时项目

Flink

· 运行时架构

· 数据源Source

· Window API

· Water Mark

· 状态编程

· CEP复杂事件处理

Flink SQL

· Flink SQL和Table API详细解读

Flink 内核

· Flink内核源码讲解

· 经典面试题讲解

Git&GitHub

· 安装配置

· 本地库搭建

· 基本 *** 作

· 工作流

· 集中式

ClickHouse

· ClickHouse的安装部署

· 读写机制

· 数据类型

· 执行引擎

DataV

· 使用DataV对实时项目需求计算结果进行可视化展示

sugar

· 结合Springboot对接百度sugar实现数据可视化大屏展示

Maxwell

· 使用Maxwell实时监控MySQL数据变化采集至实时项目

ElasticSearch

· ElasticSearch索引基本 *** 作、案例实 ***

Kibana

· 通过Kibana配置可视化分析

Springboot

· 利用Springboot开发可视化接口程序

空气净化器的净化从其工作原理上应该分为三大类,所以可以根据需要来选

择,有的是除甲醛比较好,有的是除臭很好,有的不能加湿,有的可以和加湿器并用,

即使是号称空气净化器之王的创迈,也有不能解决的问题,所以没有全能的空气净化

器,每个品牌都有品牌的局限性,所以说没有最好,只有更合适。

工具/原料

空气净化器

方法/步骤

紫外线净化技术

紫外线杀菌作用原理与其核酸、蛋白质及酶的作用有关,通过紫外线对微生物的照射,以改变及破坏微生物的组织结构(DNA-核酸),破坏细胞或病毒的核酸结构和功能。导致核算结构突变,生物体丧失复制、繁殖能力,功能遭受破坏,从而达到消毒、杀菌的目的。紫外线净化杀菌在许多空气净化器中都普遍使用,同时还被用来做实验室和手术室的杀菌。尤其是使用光触媒原理的净化器必然会用到紫外线灯。

空气净化器净化技术原理?

光触媒净化技术

光触媒[Photo=Light]+触媒(催化剂)[catalyst]的合成词,目前所使用的光触媒技术主要来源于日本。主要有两种类型:一、在物体表面涂抹二氧化钛液体二、将二氧化钛用粘合剂粘在活性炭表面,或沉积在金属材料表面,如镍网或不锈钢网。上述两种方法因为存在四个严重的问题而难以推广:1、空气净化效果比较差2、纳米二氧化钛脱落到空气中对人不安全3、氧化能力太弱4、二氧化钛被空气中的灰尘和有机物覆盖以后很容易实效。因此,美国、德国和英国的科学家认为目前光触媒技术在十五年内很难实际应用的水平。使用该技术的产品有亚都等。

空气净化器净化技术原理?

3

等离子体净化技术

等离子体是包含足够多的正负电荷数目近于相等的带电粒子的非凝聚系统。其基本原理是利用极不均匀电场,形成电晕放电,产生等离子体,其中包含大量电子和正负离子以及具有强氧化性的自由基,它们与空气中的污染物发生非d性碰撞,附着在上面,并且打开有害物质的化学键,使其分解成单质原子或无害分子,从而净化空气。该技术的缺点是在净化的过程中容易产生大量的臭氧,会对人体造成很大的伤害,目前该技术在国外已经被淘汰。使用该技术的产品有力天世纪、日本夏普等。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6777032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存