Flink原理与实践

小米资深工程师Flink开发经验实践
分享 推荐 1 收藏 34 阅读 3.6K
鲁蔚征 (作者) 978-7-115-54615-9

关于本书的内容有任何问题,请联系 刘博

本书一方面对Flink的技术架构做了深入的介绍,另一方面涵盖了Flink大多数API,本书每章都提供了一些实践案例和习题训练,帮助读者了解、上手和熟悉Flink技术。与其他中文Flink图书相比,本书从初学者角度出发,结合相关案例,深入浅出,有助于读者学懂学会Flink。
¥69.80 ¥59.33 (8.5 折)
教学资源仅供教师教学使用,转载或另作他用版权方有权追究法律责任。

内容摘要

本书围绕大数据流处理领域,介绍Flink DataStream API、时间和窗口、状态和检查点、Table API和SQL等知识。本书以实践为导向,使用大量真实业务场景案例来演示如何基于Flink进行流处理。
本书主要面向对大数据领域感兴趣的本科生、研究生,想转行到大数据开发行业的在职人员,或有一定大数据开发经验的相关从业人员。读者最好有一定的Java或Scala编程基础,掌握计算机领域的常见技术概念。

目录

第 1章 大数据技术概述 ................ 1
1.1 什么是大数据 ................................. 2
1.1.1 大数据的5个“V” ....................... 2
1.1.2 大数据分而治之 ............................... 3
1.2 从批处理到流处理 .......................... 6
1.2.1 数据与数据流 ................................... 6
1.2.2 批处理与流处理 ............................... 7
1.2.3 为什么需要一个优秀的
流处理框架 ........................................ 7
1.3 代表性大数据技术 .......................... 9
1.3.1 Hadoop ............................................ 9
1.3.2 Spark ............................................... 10
1.3.3 Apache Kafka ............................... 11
1.3.4 Flink ................................................. 12
1.4 从Lambda到Kappa:
大数据处理平台的演进 .................. 13
1.4.1 Lambda架构 ................................ 14
1.4.2 Kappa架构 .................................... 15
1.5 流处理基础概念 ........................... 16
1.5.1 延迟和吞吐 ..................................... 16
1.5.2 窗口与时间 ..................................... 17
1.5.3 状态与检查点 ................................. 20
1.5.4 数据一致性保障 ............................. 21
1.6 编程语言的选择 ........................... 21
1.6.1 Java和Scala ................................. 21
1.6.2 Python ............................................ 22
1.6.3 SQL .................................................. 23
1.7 案例实战 使用Kafka构建
文本数据流 .................................. 23
1.7.1 Kafka和消息队列相关
背景知识 ..........................................23
1.7.2 使用Kafka构建一个
文本数据流 ......................................24
本章小结 ............................................. 26
第 2章 大数据必备编程知识 ...... 27
2.1 继承和多态 .................................. 28
2.1.1 继承、类和接口 .............................28
2.1.2 重写与重载 .....................................30
2.1.3 继承和多态小结 .............................32
2.2 泛型 ............................................ 32
2.2.1 Java中的泛型 ................................32
2.2.2 Scala中的泛型 ..............................35
2.2.3 泛型小结 .........................................36
2.3 函数式编程 .................................. 36
2.3.1 函数式编程思想简介 .....................36
2.3.2 Lambda表达式的内部结构 ........37
2.3.3 函数式接口 .....................................38
2.3.4 Java Stream API ...........................40
2.3.5 函数式编程小结 .............................41
2.4 案例实战 Flink开发环境搭建 ........ 42
2.4.1 准备所需软件 .................................42
2.4.2 下载并安装Flink ...........................43
2.4.3 创建Flink工程 ..............................43
2.4.4 调试和运行Flink程序 ..................48
2.4.5 运行程序 .........................................50
Flink原理与实践
本章小结 ............................................. 53
第3章 Flink的设计与
运行原理 ........................... 54
3.1 Flink数据流图简介 ....................... 55
3.1.1 Flink程序和数据流图 .................. 55
3.1.2 从逻辑视图转化为物理执行图 .... 57
3.1.3 数据交换策略 ................................. 58
3.2 Flink分布式架构与核心组件 .......... 59
3.2.1 Flink作业提交过程....................... 59
3.2.2 Flink核心组件 ............................... 60
3.2.3 Flink组件栈 ................................... 61
3.3 任务执行与资源划分 ..................... 63
3.3.1 再谈逻辑视图到物理执行图 ........ 63
3.3.2 任务、算子子任务与算子链 ........ 64
3.3.3 Slot与计算资源 ............................ 65
3.4 实验WordCount程序
迭代和完善 .................................. 67
一、实验目的 .............................................. 67
二、实验内容 .............................................. 67
三、实验要求 .............................................. 68
四、实验报告 .............................................. 68
本章小结 ............................................. 68
第4章 DataStream API的
介绍和使用 ....................... 70
4.1 Flink程序的骨架结构 ................... 71
4.1.1 设置执行环境 ................................. 71
4.1.2 读取数据源 ..................................... 72
4.1.3 进行转换操作 ................................. 72
4.1.4 结果输出 ......................................... 73
4.1.5 执行 ..................................................73
4.2 常见Transformation的
使用方法 ..................................... 73
4.2.1 单数据流基本转换 .........................74
4.2.2 基于Key的分组转换 ....................78
4.2.3 多数据流转换 .................................84
4.2.4 并行度与数据重分布 .....................86
4.3 数据类型和序列化 ........................ 92
4.3.1 Flink支持的数据类型 ...................92
4.3.2 TypeInformation .........................96
4.3.3 注册类 ..............................................98
4.3.4 Avro、Kryo、Thrift和
Protobuf .........................................99
4.3.5 数据类型的选择 .......................... 103
4.4 用户自定义函数 .......................... 104
4.4.1 接口 ............................................... 104
4.4.2 Lambda表达式 .......................... 105
4.4.3 Rich函数类 ................................. 108
4.5 实验 股票价格数据流处理 ........... 109
一、实验目的 ............................................ 109
二、实验内容 ............................................ 110
三、实验要求 ............................................ 111
四、实验报告 ............................................ 112
本章小结 ........................................... 112
第5章 时间和窗口 .................... 113
5.1 Flink的时间语义 ........................ 114
5.1.1 Flink的3种时间语义 ............... 114
5.1.2 设置时间语义 .............................. 115
5.1.3 Event Time和Watermark ..... 116
5.1.4 分布式环境下Watermark的
传播 ................................................ 116
5.1.5 设置时间戳及生成
Watermark .................................. 118
5.1.6 平衡延迟和准确性 ..................... 123
5.2 ProcessFunction系列函数 ........ 123
5.2.1 Timer的使用方法 ...................... 123
5.2.2 侧输出 .......................................... 126
5.2.3 在两个数据流上使用
ProcessFunction ....................... 127
5.3 窗口算子的使用 .......................... 129
5.3.1 窗口程序的骨架结构 ................. 129
5.3.2 内置的3种窗口划分方法 ......... 131
5.3.3 窗口处理函数 .............................. 135
5.3.4 拓展和自定义窗口 ..................... 141
5.4 双流连接 ................................... 146
5.4.1 Window Join ............................. 146
5.4.2 Interval Join ............................... 149
5.5 处理迟到数据 ............................. 150
5.5.1 将迟到数据发送到另外一个
数据流 ........................................... 151
5.5.2 更新计算结果 .............................. 151
5.6 实验 股票价格数据进阶分析 ........ 153
一、实验目的 ........................................... 153
二、实验内容 ........................................... 153
三、实验要求 ........................................... 154
四、实验报告 ........................................... 154
本章小结 ........................................... 154
第6章 状态和检查点 ................ 155
6.1 实现有状态的计算 ...................... 156
6.1.1 为什么要管理状态 ..................... 156
6.1.2 Flink中几种常用的状态 ........... 157
6.1.3 横向扩展问题 .............................. 159
6.1.4 Keyed State的使用方法 .......... 160
6.1.5 Operator List State的
使用方法 ....................................... 165
6.1.6 BroadcastState的使用方法 .... 169
6.2 Checkpoint机制的原理及
配置方法 ................................... 173
6.2.1 Flink分布式快照流程 ................ 173
6.2.2 分布式快照性能优化方案 ......... 177
6.2.3 State Backend ........................... 177
6.2.4 Checkpoint相关配置 ............... 179
6.2.5 重启恢复流程 .............................. 180
6.3 Savepoint机制的原理及
使用方法 ................................... 182
6.3.1 Savepoint机制与Checkpoint
机制的区别 ................................... 182
6.3.2 Savepoint的使用方法 ............. 183
6.3.3 读/写Savepoint中的数据 ...... 184
6.3.4 Queryable State和
State Processor API ................... 194
6.4 实验 电商平台用户行为分析 ........ 195
一、实验目的 ............................................ 195
二、实验内容 ............................................ 195
三、实验要求 ............................................ 195
四、实验报告 ............................................ 195
本章小结 ........................................... 195
第7章 Flink连接器 ................ 196
7.1 Flink端到端的
Exactly-Once保障 ................... 197
7.1.1 故障恢复与一致性保障 ............. 197
7.1.2 幂等写 ........................................... 198
7.1.3 事务写 ........................................... 199
7.2 自定义Source和Sink ............... 200
7.2.1 Flink 1.11之前的Source ........ 200
7.2.2 Flink 1.11之后的Source ........ 205
Flink原理与实践
7.2.3 自定义Sink ................................. 205
7.3 Flink中常用的Connector .......... 211
7.3.1 内置I/O接口 .............................. 212
7.3.2 Flink Kafka Connector ........... 217
7.4 实验 读取并输出股票价格
数据流 ...................................... 220
一、实验目的 ........................................... 220
二、实验内容 ........................................... 220
三、实验要求 ........................................... 220
四、实验报告 ........................................... 221
本章小结 ........................................... 221
第8章 Table API & SQL的
介绍和使用 ..................... 222
8.1 Table API & SQL综述 .............. 223
8.1.1 Table API & SQL程序的
骨架结构 ....................................... 223
8.1.2 创建TableEnvironment .......... 224
8.1.3 获取表 .......................................... 227
8.1.4 在表上执行语句 .......................... 228
8.1.5 将表结果输出 .............................. 229
8.1.6 执行作业 ...................................... 229
8.1.7 获取表的具体方式 ..................... 231
8.2 动态表和持续查询 ...................... 233
8.2.1 动态表和持续查询 ..................... 233
8.2.2 流处理的限制 .............................. 237
8.2.3 状态过期时间 .............................. 238
8.3 时间和窗口 ................................ 238
8.3.1 时间属性 ...................................... 238
8.3.2 窗口聚合 ...................................... 241
8.4 Join .......................................... 249
8.4.1 时间窗口 Join ............................ 250
8.4.2 临时表 Join ................................ 251
8.4.3 传统意义上的Join ..................... 254
8.5 SQL DDL ................................. 256
8.5.1 注册和获取表 .............................. 256
8.5.2 USE和SHOW语句 .................. 258
8.5.3 CREATE、DROP、
ALTER语句 .................................. 259
8.5.4 INSERT语句 ............................... 262
8.6 系统内置函数 ............................. 263
8.6.1 标量函数 ...................................... 264
8.6.2 聚合函数 ...................................... 269
8.6.3 时间单位 ...................................... 269
8.7 用户自定义函数 .......................... 270
8.7.1 注册函数 ...................................... 270
8.7.2 标量函数 ...................................... 270
8.7.3 表函数 ........................................... 272
8.7.4 聚合函数 ...................................... 274
8.8 实验 使用Flink SQL处理
IoT数据 .................................... 277
一、实验目的 ............................................ 277
二、实验内容 ............................................ 277
三、实验要求 ............................................ 278
四、实验报告 ............................................ 279
本章小结 ........................................... 279
第9章 Flink的部署和配置 .... 280
9.1 Flink集群部署模式 ..................... 281
9.1.1 Standalone集群 ....................... 281
9.1.2 Hadoop YARN集群 ................. 282
9.1.3 Kubernetes集群 ....................... 285
9.2 配置文件 ................................... 287
9.2.1 Java和类加载 ............................. 288
9.2.2 并行度与槽位划分 ...................... 289
9.2.3 内存 .............................................. 290
9.2.4 磁盘 .............................................. 294
9.3 算子链与槽位共享 ...................... 294
9.3.1 设置算子链 .................................. 294
9.3.2 设置槽位共享 .............................. 295
9.4 命令行工具 ................................ 296
9.4.1 提交作业 ...................................... 297
9.4.2 管理作业 ...................................... 298
9.5 与Hadoop集成 ........................ 299
9.5.1 添加Hadoop Classpath ......... 299
9.5.2 将Hadoop依赖包添加到
9.5.3 本地调试 ...................................... 300
9.6 实验 作业编码、打包与提交 ........ 301
一、实验目的 ............................................ 301
二、实验内容 ............................................ 301
三、实验要求 ............................................ 301
四、实验报告 ............................................ 301
本章小结 ........................................... 301
参考文献 ......................................... 302

读者评论

赶紧抢沙发哦!

我要评论

作者介绍

鲁蔚征
前小米工程师,现中国人民大学教师,一直从事大数据相关的开发和研究工作,关注大数据行业的发展,先后接触了Hadoop、Hive、Kafka、Spark、TensorFlow等大数据中间件,在大数据的流处理和批处理方向上有一定的实际工作经验。主要研究项目及领域为推荐系统、大数据。今日头条科技领域优质创作者。

推荐用户

购买本书用户

相关图书

人邮微信
本地服务
教师服务
教师服务
读者服务
读者服务
返回顶部
返回顶部