《Flink原理、实战与性能优化》

举报
华章计算机 发表于 2020/02/17 12:33:52 2020/02/17
【摘要】 本节书摘来自华章计算机《Flink原理、实战与性能优化》 一作者是张利兵 。

大数据技术丛书

Flink原理、实战与性能优化

1581913896967537.jpg

张利兵 著

 


 

 

 

Preface 前  言

为什么要写这本书

记得在几年前刚开始做流式计算相关的项目时,发觉项目对实时性和数据量的要求很高,无奈求助于Flink开源社区(后文简称“社区”),在社区中发现可以使用的流式框架有很多,例如比较主流的框架Apache Storm、Spark Streaming等,Apache Flink(简称“Flink”)也在其中。于是笔者开始对各种流式框架进行详细研究,最后发现能同时支持低延迟、高吞吐、Excactly-once的框架只有Apache Flink,从那时起笔者就对Flink这套框架充满兴趣,不管是其架构还是接口,都可以发现其中包含了非常优秀的设计思想。虽然当时Flink在社区的成熟度并不是很高,但笔者还是决定将Flink应用在自己的项目中,自此开启了Flink分布式计算技术应用之旅。

刚开始学习Flink,对于没有分布式处理技术和流式计算经验的人来说会相对比较困难,因为其很难理解有状态计算、数据一致性保障等概念。尤其在相关中文资源比较匮乏的情况下,需要用户在官网以及国外的技术网站中翻阅大量的外文资料,这在一定程度上对学习和应用Flink造成了阻碍。笔者在2018年参加了一场由Flink中文社区组织的线下交流活动,当时听了很多领域内专家将Flink应用在不同业务场景中的分享,发现Flink这项技术虽然优秀,但是国内尚未有一本能够全面介绍Flink的中文书籍,于是笔者决定结合自己的实际项目经验来完成一本Flink中文书籍,以帮助他人学习和使用Flink这项优秀的分布式处理技术。

阿里巴巴在2018年1月开源了其内部Flink的分支项目Blink,并推动社区将Blink中优秀的特性合并到Flink主干版本中,一时间Flink在国内的发展被推向了高潮,成为很多公司想去尝试使用的新技术。因此笔者相信未来会有更多的开发者参与到Flink社区中来,Flink也将在未来的大数据生态中占据举足轻重的位置。

读者对象

本书从多个方面对Flink进行了深入介绍,包括原理、多种抽象接口的使用,以及Flink的性能监控与调优等方面,因此本书比较适合以下类型的读者。

流计算开发工程师

大数据架构工程师

大数据开发工程师

数据挖掘工程师

高校研究生以及高年级本科生

如何阅读本书

本书共分为10章,各章节间具有一定的先后关系,对于刚入门的读者,建议从第1章开始循序渐进地学习。

对于有一定经验的读者可以自行选择章节开始学习。如果想使用Flink开发流式应用,则可以直接阅读第4章、第5章,以及第7章之后的内容;如果想使用Flink开发批计算应用,则可以选择阅读第5章以及第7章之后的内容。

勘误和支持

除封面署名外,参加本书编写工作的还有:张再胜、尚越、程龙、姚远等。由于笔者水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。由于Flink技术的参考资料相对较少,因此书中有些地方参考了Flink官方文档,读者也可以结合Flink官网来学习。书中的全部源文件可以从GitHub网站下载,地址为https://github.com/zhanglibing1990/learning-flink。同时笔者也会将相应的功能及时更新。如果你有更多宝贵的意见可以通过QQ群686656574或电子邮箱zhanglibing1990@126.com联系笔者,期待能够得到你们的真挚反馈。

致谢

在本书的写作过程中,得到了很多朋友及同事的帮助和支持,在此表示衷心感谢!

感谢我的女朋友,因为有你的支持,我才能坚持将本书顺利完成,谢谢你一直陪伴在我的身边,不断鼓励我前行。

感谢机械工业出版社华章公司的编辑杨福川和张锡鹏,在这半年多的时间中始终支持我的写作,你们的鼓励和帮助引导我顺利完成全部书稿。

谨以此书献给我最亲爱的家人,以及众多热爱Flink的朋友!

总结

本书最开始介绍Flink的发展历史,然后对Flink批数据和流数据的不同处理接口进行介绍,再对Flink的部署与实施、性能优化等方面进行全面讲解。经过系统完整地了解和学习Flink分布式处理技术之后,可以发现Flink有很多非常先进的概念,以及非常完善的接口设计,这些都能让用户更加有效地处理大数据,特别是流式数据处理。随着大数据技术的不断发展,Flink也在大数据的浪潮中奋勇前行。越来越多的用户也参与到Flink社区的开发中,尤其是近年来随着阿里巴巴的推进,Blink的开源在一定程度上推动了Flink在国内大规模的落地。相信在不久的将来,Flink会逐渐成为国内乃至全球不可或缺的分布式处理引擎,笔者也相信Flink在流式数据处理领域会有新的突破,能够改变目前大部分基于批处理的模式,让分布式数据处理变得更加高效,使得数据处理成本不断降低。

 

张利兵  

2019年  

 

 

 

 

目  录Contents

前言

第1章 Apache Flink介绍  1

1.1 Apache Flink是什么  1

1.2 数据架构的演变  2

1.2.1 传统数据基础架构  3

1.2.2 大数据数据架构  4

1.2.3 有状态流计算架构  5

1.2.4 为什么会是Flink  6

1.3 Flink应用场景  8

1.4 Flink基本架构  10

1.4.1 基本组件栈  10

1.4.2 基本架构图  11

1.5 本章小结  13

第2章 环境准备  14

2.1 运行环境介绍  14

2.2 Flink项目模板  15

2.2.1 基于Java实现的项目模板  15

2.2.2 基于Scala实现的项目模板  18

2.3 Flink开发环境配置  20

2.3.1 下载IntelliJ IDEA IDE  21

2.3.2 安装Scala Plugins  21

2.3.3 导入Flink应用代码  22

2.3.4 项目配置  22

2.4 运行Scala REPL  24

2.4.1 环境支持  24

2.4.2 运行程序  24

2.5 Flink源码编译  25

2.6 本章小结  26

第3章 Flink编程模型  27

3.1 数据集类型  27

3.2 Flink编程接口  29

3.3 Flink程序结构  30

3.4 Flink数据类型  37

3.4.1 数据类型支持  37

3.4.2 TypeInformation信息获取  40

3.5 本章小结  43

第4章 DataStream API 介绍与使用  44

4.1 DataStream编程模型  44

4.1.1 DataSources数据输入  45

4.1.2 DataSteam转换操作  49

4.1.3 DataSinks数据输出  59

4.2 时间概念与Watermark  61

4.2.1 时间概念类型  61

4.2.2 EventTime和Watermark  63

4.3 Windows窗口计算  69

4.3.1 Windows Assigner  70

4.3.2 Windows Function  77

4.3.3 Trigger窗口触发器  83

4.3.4 Evictors数据剔除器  87

4.3.5 延迟数据处理  88

4.3.6 连续窗口计算  89

4.3.7 Windows多流合并  90

4.4 作业链和资源组  95

4.4.1 作业链  95

4.4.2 Slots资源组  96

4.5 Asynchronous I/O异步操作  97

4.6 本章小结  98

第5章 Flink状态管理和容错  100

5.1 有状态计算  100

5.2 Checkpoints和Savepoints  109

5.2.1 Checkpoints检查点机制  109

5.2.2 Savepoints机制  111

5.3 状态管理器  114

5.3.1 StateBackend类别  114

5.3.2 状态管理器配置  116

5.4 Querable State  118

5.5 本章小结  123

第6章 DataSet API介绍与使用  124

6.1 DataSet API  124

6.1.1 应用实例  125

6.1.2 DataSources数据接入  126

6.1.3 DataSet转换操作  128

6.1.4 DataSinks数据输出  134

6.2 迭代计算  136

6.2.1 全量迭代  136

6.2.2 增量迭代  137

6.3 广播变量与分布式缓存  139

6.3.1 广播变量  139

6.3.2 分布式缓存  140

6.4 语义注解  141

6.4.1 Forwarded Fileds注解  141

6.4.2 Non-Forwarded Fileds注解  143

6.4.3 Read Fields注解  144

6.5 本章小结  145

第7章 Table API & SQL介绍与使用  146

7.1 TableEnviroment概念  146

7.1.1 开发环境构建  147

7.1.2 TableEnvironment基本操作  147

7.1.3 外部连接器  155

7.1.4 时间概念  162

7.1.5 Temporal Tables临时表  166

7.2 Flink Table API  167

7.2.1 Table API应用实例  167

7.2.2 数据查询和过滤  168

7.2.3 窗口操作  168

7.2.4 聚合操作  173

7.2.5 多表关联  175

7.2.6 集合操作  177

7.2.7 排序操作  178

7.2.8 数据写入  179

7.3 Flink SQL使用  179

7.3.1 Flink SQL实例  179

7.3.2 执行SQL  180

7.3.3 数据查询与过滤  181

7.3.4 Group Windows窗口操作  182

7.3.5 数据聚合  184

7.3.6 多表关联  186

7.3.7 集合操作  187

7.3.8 数据输出  189

7.4 自定义函数  189

7.4.1 Scalar Function  189

7.4.2 Table Function  191

7.4.3 Aggregation Function  192

7.5 自定义数据源  193

7.5.1 TableSource定义  193

7.5.2 TableSink定义  196

7.5.3 TableFactory定义  199

7.6 本章小结  201

第8章 Flink组件栈介绍与使用  202

8.1 Flink复杂事件处理  202

8.1.1 基础概念  203

8.1.2 Pattern API  204

8.1.3 事件获取  210

8.1.4 应用实例  212

8.2 Flink Gelly图计算应用  213

8.2.1 基本概念  213

8.2.2 Graph API  214

8.2.3 迭代图处理  220

8.2.4 图生成器  226

8.3 FlinkML机器学习应用  227

8.3.1 基本概念  227

8.3.2 有监督学习算子  229

8.3.3 数据预处理  231

8.3.4 推荐算法  234

8.3.5 Pipelines In FlinkML  235

8.4 本章小结  236

第9章 Flink部署与应用  237

9.1 Flink集群部署  237

9.1.1 Standalone Cluster部署  238

9.1.2 Yarn Cluster部署  240

9.1.3 Kubernetes Cluster部署  244

9.2 Flink高可用配置  247

9.2.1 Standalone集群高可用配置  248

9.2.2 Yarn Session集群高可用配置  250

9.3 Flink安全管理  251

9.3.1 认证目标  251

9.3.2 认证配置  252

9.3.3 SSL配置  253

9.4 Flink集群升级  255

9.4.1 任务重启  256

9.4.2 状态维护  256

9.4.3 版本升级  257

9.5 本章小结  258

第10章 Flink监控与性能优化  259

10.1 监控指标  259

10.1.1 系统监控指标  259

10.1.2 监控指标注册  261

10.1.3 监控指标报表  264

10.2 Backpressure监控与优化  266

10.2.1 Backpressure进程抽样  266

10.2.2 Backpressure页面监控  267

10.2.3 Backpressure配置  268

10.3 Checkpointing监控与优化  268

10.3.1 Checkpointing页面监控  268

10.3.2 Checkpointing优化  271

10.4 Flink内存优化  273

10.4.1 Flink内存配置  274

10.4.2 Network Buffers配置  275

10.5 本章小结  277


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。