(1)作者资深:Apache Flink源码贡献者,多年Flink开发经验,第四范式AI数据平台架构师。
(2)深入原理:从源代码角度剖析Flink设计思想、架构原理以及各功能模块的底层实现原理。
(3)化繁为简:用大量架构设计图、UML图和代码注释降低读者阅读和理解Flink源代码的门槛。
(4)专家好评:前腾讯、360、趣头条、明源云等企业的大数据专家一致好评和推荐。
这是一本从源代码角度剖析Flink设计思想、架构原理以及各功能模块的底层实现原理的著作。
作者是Flink领域的资深技术专家和架构师,对Flink的源代码进行了深入分析和解读,同时融入了自己丰富的工程实践经验,既能让理解Flink的设计与实现原理,又能为他们解决性能优化等实际应用问题提供源码级别的指导。源码大多艰涩难懂,为了降低读者的学习门槛,本书提供了大量架构设计图、UML图和代码注释。
通过阅读本书,你将:
l 彻底掌握Flink源码设计与实现
l 深度掌握Flink作业运行流程
l 深入了解Flink部署模式实现原理
l 深度掌握Flink Runtime设计和实现原理
l 庖丁解牛Flink网络通信原理
l 探索Flink内存管理实现
l 深入了解Flink接口设计
l 从Flink源码中学习架构设计经验
前 言
第1章 Flink设计理念与基本架构 1
1.1 Flink基本设计思想 1
1.1.1 Stratosphere系统架构 1
1.1.2 DataFlow模型的设计思想 3
1.1.3 分布式异步快照算法 6
1.2 Flink整体架构 9
1.2.1 架构介绍 9
1.2.2 Flink集群架构 11
1.2.3 核心概念 12
1.3 Flink源码分析与编译 14
1.3.1 源码编译 14
1.3.2 源码调试环境搭建 15
1.4 本章小结 19
第2章 DataStream的设计与实现 20
2.1 DataStream API的主要组成 20
2.1.1 DataStream API应用实例 20
2.1.2 Transformation详解 23
2.2 StreamOperator的定义与实现 25
2.2.1 StreamOperator接口实现 26
2.2.2 OneInputStreamOperator与TwoInputStreamOperator 31
2.2.3 StreamOperatorFactory详解 33
2.3 Function的定义与实现 35
2.3.1 RichFunction详解 36
2.3.2 SourceFunction与SinkFunction 38
2.3.3 ProcessFunction的定义与实现 44
2.4 TimerService的设计与实现 47
2.4.1 时间概念与Watermark 47
2.4.2 TimerService时间服务 53
2.5 DataStream核心转换 59
2.5.1 KeyedStream与物理分区 59
2.5.2 WindowedStream的设计与实现 62
2.6 本章小结 68
第3章 运行时的核心原理与实现 69
3.1 运行时的整体架构 69
3.1.1 运行时整体架构概览 69
3.1.2 集群的启动与初始化 72
3.2 运行时组件的创建和启动 79
3.2.1 集群组件的创建和启动 79
3.2.2 WebMonitorEndpoint的创建与初始化 85
3.2.3 Dispatcher的创建与初始化 91
3.2.4 ResourceManager的创建与初始化 98
3.2.5 TaskManager的创建与启动 106
3.3 集群资源管理 115
3.3.1 ResourceManager详解 116
3.3.2 ResourceManagerGateway接口实现 118
3.3.3 Slot计算资源管理 119
3.4 系统高可用与容错 130
3.4.1 HighAvailabilityServices的设计与实现 130
3.4.2 基于ZooKeeper实现高可用 135
3.4.3 JobGraphStore的设计与实现 141
3.5 本章小结 144
第4章 任务提交与执行 145
4.1 客户端作业提交 145
4.1.1 命令行提交 145
4.1.2 创建和初始化CLIFrontend 148
4.1.3 PackagedProgram构造 150
4.2 ExecutionEnvironment初始化 152
4.2.1 ExecutionEnvironment类型 152
4.2.2 StreamExecutionEnvironment详解 154
4.3 将Pipeline转换成JobGraph 161
4.3.1 用Transformation生成StreamGraph 162
4.3.2 将StreamGraph转换为JobGraph 169
4.3.3 将JobGraph提交到集群运行时 176
4.4 JobGraph的接收与运行 178
4.4.1 JobGraph提交整体流程 178
4.4.2 Dispatcher任务与分发 180
4.4.3 JobManager启动与初始化 184
4.4.4 JobMaster详解 188
4.5 ExecutionGraph的调度与执行 195
4.5.1 ExecutionGraph生成 198
4.5.2 SchedulerNG调度器 200
4.6 Task的执行与注销 206
4.6.1 Task的启动与注销 208
4.6.2 AbstractInvokable的加载与初始化 211
4.6.3 StreamTask详解 212
4.6.4 StreamTask线程模型 216
4.6.5 Task重启与容错策略 223
4.7 本章小结 234
第5章 集群部署模式 235
5.1 基本概念 235
5.1.1 ClusterClient的创建与获取 235
5.1.2 ClusterEntrypoint集群启动类 241
5.2 Flink On Yarn的设计与实现 245
5.2.1 Yarn架构的设计与实现 245
5.2.2 Session集群的部署与启动 247
5.2.3 YarnResourceManager详解 253
5.3 Flink On Kubernetes的设计与实现 258
5.3.1 Flink On Kubernetes架构 259
5.3.2 Session集群的部署与启动 261
5.3.3 KubernetesResourceManager详解 268
5.4 本章小结 274
第6章 状态管理与容错 275
6.1 状态数据管理 275
6.1.1 状态数据类型 275
6.1.2 状态初始化流程 279
6.2 KeyedState的创建与管理 285
6.2.1 KeyedStateBackend的整体设计 285
6.2.2 HeapKeyedStateBackend的实现 286
6.3 OperatorState的创建与管理 295
6.3.1 OperatorStateBackend的整体设计 295
6.3.2 基于DefaultOperatorState-Backend创建OperatorState 296
6.4 StateBackend详解 299
6.4.1 StateBackend的整体设计 299
6.4.2 MemoryStateBackend的实现 303
6.5 Checkpoint的设计与实现 308
6.5.1 Checkpoint的实现原理 308
6.5.2 Checkpoint的触发过程 315
6.6 本章小结 341
第7章 网络通信 342
7.1 集群RPC通信机制 342
7.1.1 Flink RPC框架的整体设计 342
7.1.2 AkkaRpcService详解 347
7.1.3 RpcServer动态代理实现 357
7.1.4 AkkaRpcActor的设计与实现 360
7.1.5 集群组件之间的RPC通信 363
7.2 NetworkStack的设计与实现 371
7.2.1 NetworkStack概览 371
7.2.2 StreamTask数据流 374
7.2.3 RecordWriter详解 384
7.2.4 ShuffleMaster与Shuffle-Environment 394
7.2.5 ResultPartition与InputGate详解 410
7.2.6 ConnectManager的设计与实现 424
7.2.7 NetworkBuffer资源管理 449
7.3 基于信用值的反压机制实现 463
7.3.1 反压机制理论基础 463
7.3.2 基于信用值的反压机制详解 466
7.4 本章小结 475
第8章 内存管理 476
8.1 内存管理概述 476
8.1.1 积极的内存管理 476
8.1.2 Flink内存模型 478
8.2 MemorySegment的设计与实现 479
8.2.1 MemorySegment架构概览 480
8.2.2 MemorySegment详解 481
8.2.3 MemorySegment内存使用 486
8.3 DataInputView与DataOutputView 489
8.3.1 DataInputDeserializer和DataOutputSerializer 491
8.3.2 DataInputViewStreamWrapper与DataOutputViewStreamWrapper 494
8.3.3 AbstractPagedInputView与AbstractPagedOutputView 495
8.4 数据序列化与反序列化 501
8.4.1 TypeInformation类型系统 501
8.4.2 RecordSerializer与RecordDeserializer 508
8.5 本章小结 515
温馨提示:请使用泸西县图书馆的读者帐号和密码进行登录
本书能带领大数据开发人员从源码级别理解Flink的设计,让他们从Flink的实现中受益匪浅。我对作者阅读Flink源码时所面临的挑战和困难,感同身受。相信作者一定是凭借着坚韧的毅力,克服了重重困难才写成此书。
——耿嘉安 360数据开发高级专家
Flink 已成为主流的大数据实时处理技术,从一线互联网公司到中小企业都有很多核心应用场景。只有足够了解它的原理,才能做好各类优化,提供底层技术支撑,保障业务质量,相信本书能够给你带来这些帮助。
——张超 资深Elasticsearch技术专家
Flink已经成为“批流一体“的代表性技术,很高兴能看到这本书上市,我相信这本将Flink源码讲透的书,一定能够帮助读者更加游刃有余地将Flink技术应用到实际的工作中去。
——朱凯 明源云数据平台产品总监
本书详细分析了Flink各大重要模块的设计与实现,包括作业提交、作业运行时、状态与内存管理、网络通信等。它包含丰富的UML图例以及带注释的源码,使得读者既能从全局视角上把握各种重要概念,又能微观上深入理解具体知识点的实现逻辑,点面俱全,张弛有度。
——杨华 前腾讯Flink框架核心研发工程师/某出行公司大数据平台负责人
本书详细剖析了Flink内核的设计艺术。深入任务运行、状态管理、网络通信、内存管理等核心模块,展示了Flink流批框架的架构全景。对于大数据开发工程师、运维工程师、架构师等都有很好的指导意义,甚至能让他们在学习其他类似框架时触类旁通。
——金海 趣头条大数据负责人