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之流处理理论基础的更多相关文章

  1. Flink在流处理上常见的Source和sink操作

    flink在流处理上的source和在批处理上的source基本一致.大致有4大类 1.基于本地集合的source(Collection-based-source) 2.基于文件的source(Fil ...

  2. flink的流处理特性

    flink的流处理特性: 支持高吞吐.低延迟.高性能的流处理 支持带有事件时间的窗口(Window)操作 支持有状态计算的Exactly-once语义 支持高度灵活的窗口(Window)操作,支持基于 ...

  3. Plink v0.1.0 发布——基于Flink的流处理平台

    Plink是一个基于Flink的流处理平台,旨在基于 [Apache Flink]封装构建上层平台. 提供常见的作业管理功能.如作业的创建,删除,编辑,更新,保存,启动,停止,重启,管理,多作业模板配 ...

  4. 《基于Apache Flink的流处理》读书笔记

    前段时间详细地阅读了 <Apache Flink的流处理> 这本书,作者是 Fabian Hueske&Vasiliki Kalavri,国内崔星灿翻译的,这本书非常详细.全面得介 ...

  5. 【Flink】流-表概念

    title: Flink流-表概念 date: 2017-12-12 14:48:16 categories: technique tags: Flink Flink Streaming Dynami ...

  6. 统一批处理流处理——Flink批流一体实现原理

    实现批处理的技术许许多多,从各种关系型数据库的sql处理,到大数据领域的MapReduce,Hive,Spark等等.这些都是处理有限数据流的经典方式.而Flink专注的是无限流处理,那么他是怎么做到 ...

  7. Flink的流处理API(二)

    一.Environment 1,getExecutionEnvironment getExecutionEnvironment会根据查询运行的方式决定返回什么样的运行环境,是最常用的一种创建执行环境的 ...

  8. Flink的流处理--KeyBy

    逻辑上将一个流分成不相交的分区,每个分区包含相同键的元素.在内部,这是通过散列分区来实现的 object Keyby { def main(args: Array[String]): Unit = { ...

  9. flink连接器-流处理-读写redis

    写入redis resultStream.addSink(new RedisSink(FlinkUtils.getRedisSinkConfig(parameters),new MyRedisMapp ...

随机推荐

  1. nested exception is java.io.FileNotFoundException: class path resource [jdbc.properties] cannot be opened because it does not exist

    Could not load properties; nested exception is java.io.FileNotFoundException: class path resource [j ...

  2. ubuntu14.3安装phpmyadmin

    一.安装 sudo apt-get install phpmyadmin 二.软连接 cd /var/www/html/ sudo ln -s /usr/share/phpmyadmin phpmya ...

  3. 【技术累积】【点】【java】【25】Orderd

    基础概念 Orderd是spring core中定义的一个接口,使用它以及相关的Comparator和@Order注解,可以实现对元素的排序. @Order 直接先说下@Order注解吧,使用场景较多 ...

  4. C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)

    /**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...

  5. 运维是做什么的?史上最全互联网Linux工作规划!十分钟找到linux运维工程师职业方向!

    首先祝贺你选择学习Linux,你可能即将踏上Linux的工作之旅,出发之前,让我带你来看一看关于Linux和Linux运维的一切. Linux因其高效率.易于裁剪.应用广等优势,成为了当今中高端服务器 ...

  6. EAS之校验检查

    先了解一下权限接口类提供的有关权限项检查的方法public boolean hasFunctionPermission(IObjectPK userPK,IObjectPK orgPK,String ...

  7. C# DataTable扩展方法

    在日常搬砖中,总结了一些简单的扩展方法. public static bool IsNullOrEmpty(this DataTable dt) { ; } public static bool Is ...

  8. 【vue】挂载点概念

    ## vue vue是mvvm模型,自底向上逐层应用,用于构建用户界面的渐进式框架. ### 挂载点.模板.实例 挂载点,vue仅处理挂点下面的内容(dom节点).挂载点内部的为模板. <div ...

  9. vue中的父组件及子组件生命周期的执行顺序

    一.没有任何任何显示与隐藏限制条件的情况下: 1.运行的顺序依次是: 父组件created→父组件beforeMounted→子组件created→子组件beforeMounted→子组件mounte ...

  10. ACM蓝桥杯之换硬币问题

    题目描述: 想兑换100元零钱,有1元.2元.5元.10元四种面值,总有多少种兑换方法? 解题思路: 本题可以采用多种方法求解.最容易理解的应该就是暴力穷举和递归求解.那么本文主要介绍这两种解法. 暴 ...