了解Flink: 上手手册

翻译来源 Learn Flink:Overview , Learn Flink: Hands-on Training

手册目标和范围

本手册介绍了Apache Flink的简介,其中包括了足够多的让您开始编写可伸缩的流ETL,分析和事件驱动的应用程序的知识,同时省略了许多(极为重要的)细节。重点在与对管理状态和时间的Flink APIs进行了直截了当的介绍,并期望您会掌握了这些基础知识,从而能更好掌握详细参考文档中的其余知识。每个部分末尾的链接将带您到更多了解信息的地方。

具体来说,您将学习:

  • 如何实现流数据处理管道
  • Flink怎样和为什么管理状态
  • 怎么使用事件时间来一致地计算准确的分析
  • 怎么在连续流上构建事件驱动的应用程序
  • Flink怎样能够以刚好一次的语义提供容错的,有状态的流处理

本手册重点关注四个关键概念:流数据的连续处理,事件时间,有状态流处理和状态快照。本页面介绍了这些概念。

注意:在此手册的基础上,我们进行了一系列动手练习,它们将指导您学习如何使用所介绍的概念。每节末尾都提供了相关练习的链接。

流处理

流是数据的自然栖息地。无论是来自Web服务器的事件,来自证券交易所的交易数据,还是来自工厂车间机器上的传感器读数,数据都将作为流的一部分创建。但是,当您分析数据时,您可以围绕有界流或无界流来组织处理,并且这种模式的选择会对接下来的结果影响很深。

当您处理有界的数据流时,批处理是工作的模式。在这种操作模式下,您可以选择在产生任何结果之前先摄取整个数据集,这意味着,例如,可以对数据进行排序,计算全局统计数据或产生总结所有输入的最终报告。

另一方面,流处理涉及无界的数据流。至少从概念上讲,输入可能永远不会结束,因此您被迫在数据到达时对其进行连续处理。

在Flink中,应用程序由可以被用户定义的算子转换的流媒体数据流组成。这些数据流形成有向图,这些图以一个或多个开始,并以一个或多个接收器结束。

通常程序中的转换与数据流中的算子之间存在一一对应的关系。但是,有时,一个转换可能包含多个算子。

应用程序可能会消耗来自流源(例如消息队列或分布式日志,例如Apache Kafka或Kinesis)的实时数据。但是flink也可以使用来自各种数据源的有界的历史数据。同样,可以将Flink应用程序产生的结果流发送到可以作为接收器连接的各种系统。

并行数据流

Flink中的程序本质上是并行的和分布式的。在执行期间,一个 流具有一个或多个流分区,并且每个算子具有一个或多个算子子任务。算子子任务彼此独立,并在不同的线程中执行,并且可能在不同的机器或容器上执行。

算子子任务的数量是该特定算子的并行性。同一程序的不同算子可能具有不同的并行度。

流可以在两个算子之间按一对一(或 转发)模式或重新分布模式传输数据:

  • 一对一的流(例如 ,上图中的Source和map()算子之间)保留元素的分区和排序。这意味着map()算子的subtask [1]h和Source算子的subtask [1]看见相同元素,并且元素的顺序也相同。
  • 重新分布流(如上面的map()和keyBy/window之间以及keyBy/window和Sink之间)会更改流的分区。每个算子子任务都将数据发送到不同的目标子任务,具体取决于所选的转换。例如,keyBy() (通过hashing key方式重新分区),broadcast() ,或 rebalance() (随机地重新分区)。在重新分区转换中,元素之间的顺序仅在每对发送和接收子任务中间保留(例如,map()的subtask [1]和的keyBy/window的subtask [2]))。因此,例如,上面显示的keyBy/window和Sink算子之间的重新分布引入了不确定性,即关于不同键的聚合结果到达Sink的顺序。

及时的流处理

对于大多数流应用程序而言,能够使用相同代码重新处理实时历史数据,并产生确定性和一致的结果这件事是非常棒的。

注意事件发生的顺序(并不是把事件发送进行处理的顺序),并能够推理出一组事件何时(或应该)完成,这至关重要。例如,电子商务交易或金融交易中涉及的事件。

通过使用数据流中记录的事件时间时间戳,而不是使用处理数据的机器的时钟,可以满足及时流处理的这些要求。

有状态流处理

Flink的操作可以是有状态的。这意味着如何处理一个事件可能取决于该它之前发生的所有事件的累积结果。状态可以用于简单的事情(例如,每分钟统计要显示在仪表板上的事件),也可以用于更复杂的事情(例如,用于欺诈检测模型的计算功能)。

Flink应用程序在分布式群集上并行运行。给定算子的各种并行实例将在单独的线程中独立执行,并且通常将在不同的机器上运行。

有状态算子的并行实例集实际上是分片key-value存储。每个并行实例负责处理特定keys组的事件,并且这些keys的状态保存在本地。

在下的作业图中显示了作业运行情况,横跨前三个算子的并行度为2,终止接收器并行度为1。第三个算子是有状态的,您可以看到第二个算子和第三个算子之间正在发生完全连接的网络混洗。这样做是为了通过某些键对流进行分区,以便所有需要一起处理的事件都将被处理到。

状态始终在本地存取,这有助于Flink应用程序实现高吞吐量和低延迟。您可以选择将状态保留在JVM堆上,或者如果状态太大,则保留在有效组织的磁盘数据结构中。

通过状态快照进行容错

Flink能通过状态快照和流重放的组合使用提供容错和恰好一次的语义。这些快照获取分布式管道的整个状态,保存进入到输入队列的偏移量和整个作业图的从读入数据的那一刻起的状态。发生故障时,将重新回退源,重新加载状态,并恢复处理。如上所述,这些状态快照是异步捕获的,而不会妨碍正在进行的处理。

【翻译】了解Flink-概览 -- Learn Flink-Overview的更多相关文章

  1. hadoop之Spark强有力竞争者Flink,Spark与Flink:对比与分析

    hadoop之Spark强有力竞争者Flink,Spark与Flink:对比与分析 Spark是一种快速.通用的计算集群系统,Spark提出的最主要抽象概念是弹性分布式数据集(RDD),它是一个元素集 ...

  2. flink部署操作-flink standalone集群安装部署

    flink集群安装部署 standalone集群模式 必须依赖 必须的软件 JAVA_HOME配置 flink安装 配置flink 启动flink 添加Jobmanager/taskmanager 实 ...

  3. Flink学习笔记:Flink开发环境搭建

    本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...

  4. 《从0到1学习Flink》—— 介绍Flink中的Stream Windows

    前言 目前有许多数据分析的场景从批处理到流处理的演变, 虽然可以将批处理作为流处理的特殊情况来处理,但是分析无穷集的流数据通常需要思维方式的转变并且具有其自己的术语(例如,"windowin ...

  5. 《从0到1学习Flink》—— Apache Flink 介绍

    前言 Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topi ...

  6. Flink初探-为什么选择Flink

    本文主要记录一些关于Flink与storm,spark的区别, 优势, 劣势, 以及为什么这么多公司都转向Flink. What Is Flink 一个通俗易懂的概念: Apache Flink 是近 ...

  7. 8、Flink Table API & Flink Sql API

    一.概述 上图是flink的分层模型,Table API 和 SQL 处于最顶端,是 Flink 提供的高级 API 操作.Flink SQL 是 Flink 实时计算为简化计算模型,降低用户使用实时 ...

  8. 【翻译】Flink Table Api & SQL —— Overview

    本文翻译自官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/ Flink Table Api & ...

  9. flink学习笔记-flink实战

    说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...

  10. [翻译]C# BAD PRACTICES: Learn how to make a good code by bad example---C#:如何将坏的代码重新编译为好的代码

    自己的前言说明: 本文原作者:Radoslaw Sadowski,原文链接为:C# BAD PRACTICES: Learn how to make a good code by bad exampl ...

随机推荐

  1. CF1303F 题解

    题意 传送门 有一个 \(n\times m\) 的矩阵,初始全是 \(0\).我们定义 \(a_{i,j}\) 表示矩阵中第 \(i\) 行第 \(j\) 列的元素. 如果两个格子有相邻边并且格子中 ...

  2. CF1744F MEX vs MED

    个人思路: 条件可以转化成长度为 \(x\) 的区间需要包含 \([0,\lfloor \frac{(x-1)}{2} \rfloor]\). 我们从小到大枚举每一个数 \(i\),计算长度为 \(i ...

  3. 微信APP支付后台配置

    1.申请商户号 ,申请成功后去配置证书APIv2 https://pay.weixin.qq.com/index.php/core/cert/api_cert#/    --MchKey  和MchI ...

  4. vue-element-admin框架连接yapi配置vue.config.js

    devServer: { host:'localhost', port:port, proxy:{ [process.env.VUE_APP_BASE_API + '/admin']: { //配置p ...

  5. 监控平台prometheus+grafana+snmp_explorer+blackbox_exporter+alertmanager

    一.背景介绍 公司需要监控交换机和IP设备,能够放在展示屏幕,及时发出告警信息.网上有很多监控软件,prometheus系列已经能够满足我们需求.prometheus功能强大,本次只用到一部功能.咱们 ...

  6. input type='number' 去除小箭头 clear arrow

    input type='number' 去除小箭头 两种方法 方法一 For chrome, Safari, Edge, Opera : input::-webkit-outer-spin-butto ...

  7. Lucky Chains(最大公约数的应用)

    题目:Lucky Chains 题意: 给定两个正整数a, b,若(a, b) = (a + 1, b + 1) = (a + 2, b + 2) = ... = (a + k, b + k) = 1 ...

  8. vue项目使用vue-amap调用高德地图api详细步骤

    想要的效果如下 : 高德地图 && 信息窗体 步骤一: 申请高德key 高德开放平台 | 高德地图API (amap.com) (可参考博客:   [996]如何申请高德地图用户Key ...

  9. CVE-2020-1938 Tomcat AJP漏洞复现

    一  漏洞环境 # vulhub靶场地址 https://github.com/vulhub/vulhub靶场还需要有python环境,pip,docker docker-composeGitHub上 ...

  10. XYZtoZXY

    Quaternion XYZtoZXY(Vector3 p) { Vector3 v = new Vector3(p.x, -p.y, -p.z); Quaternion qx = Quaternio ...