Flink之流处理理论基础
Introduction to Stateful Stream Processing
Traditional Data Infrastructures
企业的应用,如enterprise resource planning (ERP) systems, customer relationship management (CRM) software, or web-based applications等都会对DBMS进行操作,有时操作还会公用一个库甚至一个表。为减少应用间的耦合性,最近提出微服务概念。微服务之间通过标准接口,如RESTful HTTP进行连接。在这种情况下,微服务就可以使用自己的技术栈。
各个应用与事务数据库系统交互,这个系统的数据不能直接用于分析(格式、业务单一等问题)。想要对数据进行分析,需要对事务数据库的数据进行extract-transform-load (ETL),即复制、转换数据到数据仓库。
数据查询通常分为周期报告和热点查询。
Apache Hadoop的出现使得数据仓库的使用(存储、分析)成为可能。
Stateful Stream Processing
几乎所有的数据都是通过连续的事件流来创建的。 Stateful stream processing就是一个用来处理无界事件流的、较为通用的应用设计模式。任何处理事件流(不是简单的记录数据)的应用都需要是stateful的,即有能力存储和访问中间数据。这些状态state可存储在各种地方,如program variables, local files, or embedded or external databases。Flink把state存储到内存或绑定的数据库(不包括远程数据库),并周期性地将state的一致性checkpoint写到remote and durable storage。(state, state 一致性, and Flink’s checkpointing 机制后面介绍)
Stateful stream processing applications 通常处理事件日志,日志是append-only的,所以顺序是不变的。Flink能够保持日志的这一特点,即便是遇到挂机、升级和测试。
Stateful stream processing可以解决很多案例,其中常见的三类如下:
Event-driven Applications:接收事件流并对其执行业务逻辑,根据处理结果做出反应。场景:实时推荐、complex event processing (CEP如反作弊)、异常检测
Data Pipelines and Real-time ETL
Streaming Analytics:Flink可以把过去的数据分析步骤穿起来,包括 event ingestion, continuous computation including state maintenance, and updating the result.
The Evolution of Open Source Stream Processing
第一代分布式开源流处理器focused在millisecond latencies and provided guarantees that events would never be lost in case of a failure,但降低了结果的准确性、且处理一条数据多于一次。
第二代提高了准确性(结果仍取决于计时、事件到达时间)和数据只处理一次,但延迟提高到了秒级。
第三代解决了high throughput和low latency,made the lambda architecture obsolete。
Stream Processing Fundamentals
Introduction to dataflow programming
Dataflow graphs
Dataflow programs:类似Spark的DAG,节点称为operators并表示计算,而边表示数据依赖。没有输入端口的operators称为sources,没有输出端口的operators称为sinks。
physical dataflow graph:包含计算的细节。在这里operators变为tasks
Data parallelism and task parallelism
前者 partition input data and have tasks of the same operation execute on the data subsets in parallel
后者 have tasks from different operators performing computations on the same or different data in parallel.
Data exchange strategies
定义数据在physical dataflow graph中的分配方式。
- forward:两个任务的数据在同一机器上,不跨节点
- broadcast:如果下一级有n个并行任务,那么一个节点的所有数据都被复制n份,分别发到n个节点上。
- key-based:类似于groupbyKey,相同key到相同的任务
- random:为了平均分布数据到n个并行任务
Processing infinite streams in parallel
定义:A data stream is a potentially unbounded sequence of events
events可以是监测数据、传感器的测量、信用卡交易等。
Latency and throughput
Latency:不是平均延迟,而是每次都要低延迟。Throughput:处理速度。两者必须做取舍,除非增加机器来提高并行处理。
背压backpressure :数据涌入的速度大于处理速度,并挤爆了缓冲区,数据就会丢失。
Operations on data streams
计算可分为无状态和有状态。前者不保留历史,计算更快,失败也可重算。有状态则可以用于更新。
Data ingestion and data egress,即source和sink
Transformation operations:相当于map操作
Rolling aggregation
Window:为了得到计算结果,必须收集并存储数据时用(在存储期间可用于查询)。窗口运算不断产生有限数据集buckets。事件会被根据其特征或到达时间分配到buckets。所以这种运算要定义buckets什么时候被使用(触发条件),事件分配规则和产生buckets的频率。
Tumbling:不重叠的固定大小(数量或者时间)
Sliding:重叠固定大小
Session:设定不活跃时间长度,timeout就算session窗口结束
这些窗口也可以并行,比如一个窗口针对同一id的信息
Time semantics
Processing time:服务端处理数据的时点,适合低延迟要求高的,准确度稍低的,因为不需要理会延迟和数据产生顺序,数据一旦到达或达到触发数量就可以进行计算。但这样的结果是不一致的(不同顺序、数据),不可reproduce的。
Event time:客户端产生数据的时点,适合场景反之,即便乱序也能保持唯一正确。
Watermarks:设定多久不再接受延迟的信息,这是低延迟和准确性的权衡。stream processing system提供超出watermarks范围的数据的处理方式很重要,比如忽略、记录或者用它来更新数据。
State and consistency models
由于流数据是无界的,所以要限定state的大小,比如聚合成一些指标或保留部分特征等。state的实现要防止并发更新、划分数据流和保证数据的准确。
Task failures:一个任务的顺序:接收事件(存入buffer)、可能要更新state、产生结果。任务失败可以是这里的任何一个步骤。
假设:这里假设网络不会丢失和重复数据。未失败的任务都遵循上述步骤。
Result guarantees
AT-MOST-ONCE:do nothing,数据丢失,适合准确度要求不高的。
AT-LEAST-ONCE:保证没有数据丢失,即便对数据进行重复处理(即也不一定准确)。
EXACTLY-ONCE:没有数据丢失、数据只处理一次。即如果任务失败,在重启计算时会知道上一次更新是否已经反映在state上。
END-TO-END EXACTLY-ONCE:包括source和sink的整个pipeline
不一定所有情况都需要最高级别的保证,如计算最值就可以采用AT-LEAST-ONCE
参考:
Stream Processing with Apache Flink by Vasiliki Kalavri; Fabian Hueske
Flink之流处理理论基础的更多相关文章
- Flink在流处理上常见的Source和sink操作
flink在流处理上的source和在批处理上的source基本一致.大致有4大类 1.基于本地集合的source(Collection-based-source) 2.基于文件的source(Fil ...
- flink的流处理特性
flink的流处理特性: 支持高吞吐.低延迟.高性能的流处理 支持带有事件时间的窗口(Window)操作 支持有状态计算的Exactly-once语义 支持高度灵活的窗口(Window)操作,支持基于 ...
- Plink v0.1.0 发布——基于Flink的流处理平台
Plink是一个基于Flink的流处理平台,旨在基于 [Apache Flink]封装构建上层平台. 提供常见的作业管理功能.如作业的创建,删除,编辑,更新,保存,启动,停止,重启,管理,多作业模板配 ...
- 《基于Apache Flink的流处理》读书笔记
前段时间详细地阅读了 <Apache Flink的流处理> 这本书,作者是 Fabian Hueske&Vasiliki Kalavri,国内崔星灿翻译的,这本书非常详细.全面得介 ...
- 【Flink】流-表概念
title: Flink流-表概念 date: 2017-12-12 14:48:16 categories: technique tags: Flink Flink Streaming Dynami ...
- 统一批处理流处理——Flink批流一体实现原理
实现批处理的技术许许多多,从各种关系型数据库的sql处理,到大数据领域的MapReduce,Hive,Spark等等.这些都是处理有限数据流的经典方式.而Flink专注的是无限流处理,那么他是怎么做到 ...
- Flink的流处理API(二)
一.Environment 1,getExecutionEnvironment getExecutionEnvironment会根据查询运行的方式决定返回什么样的运行环境,是最常用的一种创建执行环境的 ...
- Flink的流处理--KeyBy
逻辑上将一个流分成不相交的分区,每个分区包含相同键的元素.在内部,这是通过散列分区来实现的 object Keyby { def main(args: Array[String]): Unit = { ...
- flink连接器-流处理-读写redis
写入redis resultStream.addSink(new RedisSink(FlinkUtils.getRedisSinkConfig(parameters),new MyRedisMapp ...
随机推荐
- CDR软件-CorelDRAW软件下载,618活动
618我有诚意,你呢? 不花钱的618,是残缺的618 给自己一个放肆shopping的机遇 活动力度不够大? 继续升级,终极体验 618疯狂倒计时! 同志们,如果你错过了之前的抢先购和升级活动 那么 ...
- 新建springcloud 找不到请求路径
新建 启动类 controller 都不可以直接放在 java 目录下 否则启动失败
- Excel 导入 分批导入
tm.begin(); sm.begin(); try { result = excel.readE(headKeyV,path); for (int index = 1; index < re ...
- php第二十节课
JSON弹窗 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- php第十二节课
练习 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...
- 模板中tempname与class区别
前言 在分析traits编程之前, 我们需要对模板参数类型tempname和class有一定的了解, 要明白他们在哪些方面不同, 哪些方面相同, 这样才能对体会到traits编程的核心. 如果你已经明 ...
- 使用IDM下载软件下载百度云网盘里的资源,以Chrome浏览器为例
1.下载安装最新版的Chrome浏览器,我是在腾讯软件下载中心下载的,使用普通下载,下载地址:https://dl.softmgr.qq.com/original/Browser/72.0.3626. ...
- 爬虫文件存储-3:Redis
前提条件: 安装并运行redis服务端程序,安装RedisPy库 说明:Redis 是 StrictRedis 的子类,它的主要功能是用于向后兼容旧版本库里的几个方法,官方推荐使用 StrictRed ...
- Django View(视图系统)
Django View 官方文档 一个视图函数(类),简称视图,是一个简单的 Python 函数(类),它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误 ...
- OSI 7层模型和 TCP/IP 5层模型
网络协议通常分不同层次进行开发,每一层分别负责不同的通行功能. 两种参考模型 OSI 和 TCP/IP, OSI 先有模型后有协议,TCP/IP 则相反. OSI 7层模型 - 应用层 - 表示层 - ...