Flink-v1.12官方网站翻译-P005-Learn Flink: Hands-on Training
学习Flink:实践培训

本次培训的目标和范围
本培训介绍了Apache Flink,包括足够的内容让你开始编写可扩展的流式ETL,分析和事件驱动的应用程序,同时省略了很多(最终重要的)细节。本书的重点是为Flink管理状态和时间的API提供直接的介绍,希望在掌握了这些基础知识后,你能更好地从更详细的参考文档中获取其余需要了解的内容。每一节末尾的链接将引导你到可以学习更多知识的地方。
具体来说,您将学习
- 如何实现流数据处理管道
- Flink如何以及为何管理国家
- 如何使用事件时间来持续计算准确的分析结果?
- 如何在连续流上构建事件驱动的应用程序?
- Flink是如何提供具有精确只读语义的容错、有状态的流处理的?
本培训主要介绍四个关键概念:流数据的连续处理、事件时间、有状态的流处理和状态快照。本页介绍了这些概念。
注 伴随本培训的是一套实践练习,它将指导你学习如何使用所介绍的概念。每一节的最后都提供了相关练习的链接。
流处理
流是数据的天然栖息地。无论是来自网络服务器的事件,还是来自股票交易所的交易,或者是来自工厂车间机器的传感器读数,数据都是作为流的一部分被创建的。但当你分析数据时,你可以围绕有界流或无界流来组织处理,你选择哪种范式都会产生深远的影响。

当你处理一个有边界的数据流时,批处理是工作的范式。在这种操作模式下,你可以选择在产生任何结果之前摄取整个数据集,这意味着,例如,可以对数据进行排序,计算全局统计,或产生一个总结所有输入的最终报告。
另一方面,流处理涉及无边界的数据流。至少在概念上,输入可能永远不会结束,因此你不得不在数据到达时持续处理数据。
在Flink中,应用程序由流式数据流组成,这些数据流可以通过用户定义的操作符进行转换。这些数据流形成定向图,从一个或多个源开始,到一个或多个汇结束。
通常,程序中的变换和数据流中的操作符之间是一对一的对应关系。但有时,一个变换可能由多个运算符组成。
一个应用程序可能会消耗来自流媒体源的实时数据,如消息队列或分布式日志,如Apache Kafka或Kinesis。但flink也可以消耗来自各种数据源的有界历史数据。同样,Flink应用正在产生的结果流也可以被发送到各种各样的系统,这些系统可以作为汇接。
并行数据流
Flink中的程序本质上是并行和分布式的。在执行过程中,一个流有一个或多个流分区,每个操作员有一个或多个操作员子任务。操作员子任务相互独立,在不同的线程中执行,也可能在不同的机器或容器上执行。
运算符子任务的数量就是该特定运算符的并行性。同一程序的不同运算符可能具有不同的并行性水平。
流可以在两个操作符之间以一对一(或转发)的模式或以再分配的模式传输数据。
- 一对一的流(例如上图中Source和map()操作符之间)保留了元素的分区和排序。这意味着map()操作符的子任务[1]将看到与Source操作符的子任务[1]所产生的元素顺序相同的元素。
- 重新分配流(如上面map()和keyBy/window之间,以及keyBy/window和Sink之间)会改变流的分区。每个操作者子任务都会根据所选的转换将数据发送到不同的目标子任务。例如keyBy()(通过散列密钥来重新分区)、broadcast()或rebalance()(随机重新分区)。在重分配交换中,元素之间的排序只在每一对发送和接收子任务中被保留(例如,map()的子任务[1]和keyBy/window的子任务[2])。所以,例如,上面所示的keyBy/window和Sink运算符之间的再分配,引入了关于不同密钥的聚合结果到达Sink的顺序的非确定性。
及时的流式处理
对于大多数流式应用来说,能够用处理实时数据的相同代码重新处理历史数据是非常有价值的--无论如何,都能产生确定性的、一致的结果。
此外,关注事件发生的顺序,而不是事件交付处理的顺序,并且能够推理出一组事件何时(或应该)完成也是至关重要的。例如,考虑电子商务交易,或金融贸易中涉及的一系列事件。
通过使用记录在数据流中的事件时间戳,而不是使用处理数据的机器的时钟,可以满足这些及时流处理的要求。
有状态的流处理
Flink的操作可以是有状态的。这意味着一个事件的处理方式可以取决于之前所有事件的累积效果。状态可以用于一些简单的事情,例如计算每分钟的事件以显示在仪表板上,或者用于一些更复杂的事情,例如计算欺诈检测模型的功能。
一个Flink应用是在分布式集群上并行运行的。一个给定的操作者的各种并行实例将以不同的线程独立执行,一般来说,它们将在不同的机器上运行。
一个有状态操作符的并行实例集实际上是一个分片的键值存储。每一个并行实例负责处理一组特定键的事件,这些键的状态被保存在本地。
下图显示了一个作业,在作业图中的前三个操作符上运行的并行度为2,终止于一个并行度为1的sink。第三个操作符是有状态的,你可以看到在第二个和第三个操作符之间发生了一个完全连接的网络洗牌。这是在通过一些键来对流进行分区,这样所有需要一起处理的事件将一起被处理。

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

通过状态快照进行容错
Flink能够通过状态快照和流重放的组合,提供容错、精确的一次性语义。这些快照捕获了分布式管道的整个状态,记录了进入输入队列的偏移以及整个作业图中因摄取了该点数据而产生的状态。当发生故障时,源会被重卷,状态被恢复,并恢复处理。如上所述,这些状态快照是异步捕获的,不会妨碍正在进行的处理。
Flink-v1.12官方网站翻译-P005-Learn Flink: Hands-on Training的更多相关文章
- Flink-v1.12官方网站翻译-P002-Fraud Detection with the DataStream API
使用DataStream API进行欺诈检测 Apache Flink提供了一个DataStream API,用于构建强大的.有状态的流式应用.它提供了对状态和时间的精细控制,这使得高级事件驱动系统的 ...
- Flink-v1.12官方网站翻译-P015-Glossary
术语表 Flink Application Cluster Flink应用集群是一个专用的Flink集群,它只执行一个Flink应用的Flink作业.Flink集群的寿命与Flink应用的寿命绑定. ...
- Flink-v1.12官方网站翻译-P004-Flink Operations Playground
Flink操作训练场 在各种环境中部署和操作Apache Flink的方法有很多.无论这种多样性如何,Flink集群的基本构件保持不变,类似的操作原则也适用. 在这个操场上,你将学习如何管理和运行Fl ...
- Flink-v1.12官方网站翻译-P022-Working with State
有状态程序 在本节中,您将了解Flink为编写有状态程序提供的API.请看一下Stateful Stream Processing来了解有状态流处理背后的概念. 带键值的数据流 如果要使用键控状态,首 ...
- Flink-v1.12官方网站翻译-P016-Flink DataStream API Programming Guide
Flink DataStream API编程指南 Flink中的DataStream程序是对数据流实现转换的常规程序(如过滤.更新状态.定义窗口.聚合).数据流最初是由各种来源(如消息队列.套接字流. ...
- Flink-v1.12官方网站翻译-P014-Flink Architecture
Flink架构 Flink是一个分布式系统,为了执行流式应用,需要对计算资源进行有效的分配和管理.它集成了所有常见的集群资源管理器,如Hadoop YARN.Apache Mesos和Kubernet ...
- Flink-v1.12官方网站翻译-P006-Intro to the DataStream API
DataStream API介绍 本次培训的重点是广泛地介绍DataStream API,使你能够开始编写流媒体应用程序. 哪些数据可以流化? Flink的DataStream APIs for Ja ...
- Flink-v1.12官方网站翻译-P025-Queryable State Beta
可查询的状态 注意:可查询状态的客户端API目前处于不断发展的状态,对所提供接口的稳定性不做保证.在即将到来的Flink版本中,客户端的API很可能会有突破性的变化. 简而言之,该功能将Flink的托 ...
- Flink-v1.12官方网站翻译-P008-Streaming Analytics
流式分析 事件时间和水印 介绍 Flink明确支持三种不同的时间概念. 事件时间:事件发生的时间,由产生(或存储)该事件的设备记录的时间 摄取时间:Flink在摄取事件时记录的时间戳. 处理时间:您的 ...
随机推荐
- Pytest测试框架(五):pytest + allure生成测试报告
Allure 是一款轻量级.支持多语言的开源自动化测试报告生成框架,由Java语言开发,可以集成到 Jenkins. pytest 测试框架支持Allure 报告生成. pytest也可以生成juni ...
- NOIP初赛篇——07信息编码表示
一.基本概念 编码 计算机要处理的数据除了数值数据以外,还有各类符号.图形.图像和声音等非数值数据.而计算机只能识别两个数字0,1.要使计算机能处理这些信息,首先必须要将各类信息转换成0与1表示的 ...
- Python+MySQL随机试卷及答案生成程序
一.背景 本文章主要是分享如何使用Python从MySQL数据库中面抽取试题,生成的试卷每一份都不一样. 二.准备工作 1.安装Python3 下载地址:https://www.python.org/ ...
- Linux学习笔记 | 配置Samba
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通 ...
- MySQL where 条件字句查询
where 条件字句 搜索条件可由一个或多个逻辑表达式组成 , 结果一般为布尔值 逻辑运算符 运算符 语法 描述 and && a and b a && b 逻辑与 两 ...
- 【Python】简单的脚本,轻松批量修改文件名称
使用python脚本,批量修改文件夹名称 先创建一些没用的案例文件 import os #创建新文件夹 dir = os.makedirs('D:\\SomeThing\\testfile') #将文 ...
- 【Python】PDF转WORD
注意,下文中的PDF文档是纯文字格式,而且非扫描版的PDF文件. 如果是扫描版或者带有图片的.可能转起来会出现排版异常并且图片无法保存到.doc文件中. 正文开始: 需要安装依赖包 pdfminer3 ...
- 【Linux】NFS相关小问题
NFS一些小问题: 1. 由于实验环境中,给了rw权限,但是执行的时候,还是提示Permission denied 于是查看nfs服务端,查看/etc/exports文件是否配置有问题 网上很多人配置 ...
- leetcode 864. 获取所有钥匙的最短路径(BFS,状态压缩)
题目链接 864. 获取所有钥匙的最短路径 题意 给定起点,要求在最短步骤内收集完所有钥匙,遇到每把锁之前只有 有对应的钥匙才能够打开 思路 BFS+状态压缩典型题目 先确定起点和总的钥匙数目,其次难 ...
- APP测试之Monkey测试
一.简介 1.什么是Monkey测试? Monkey testing,也有人叫做搞怪测试.就是用一些稀奇古怪的操作方式去测试被测试系统,以测试系统的稳定性.Monkeytest,一般指这样的测试活动, ...