大家好,我是 梦想家 Alex,好不容易到了周末 ,为了感谢大家一直以来的支持,我决定安排一次送书活动,感兴趣的朋友们记得划到文末去查看。
流计算从出现到普及,经历了非常多的变化——从早期Apache Storm等技术的落地和使用,到现在越来越多的公司选择使用Apache Flink作为流处理核心技术。Flink以其强大的批流一体处理能力以及低延迟、高吞吐等特性,正在吸引着越来越多的公司和用户加入Flink社区。
对于想要学习并掌握一门技术的开发者来说,最重要的是从原理入手,循序渐进、由浅入深地学习,然后再慢慢深入技术的内部实现。
华章妹为大家介绍一本将Flink源码讲透的书《Flink设计与实现:核心原理与源码解析》,帮助那些想深入理解源码、深度掌握Flink底层核心技术实现但没有太多时间进行研究的读者。本书可以帮助读者更加游刃有余地将Flink这项技术应用到实际工作中。
学习源码不仅能提升技术功底,还能加深对技术的理解。要想深度掌握一项技术,可以说没有什么方法比阅读源码更加有效了。通常情况下,阅读源码有较高的技术门槛,不易下手,我们需要对技术有一定的理解和认识,至少能够非常熟练地将其应用在实际工作之中,才能更好地了解其底层运行原理。否则在不了解框架使用的情况下贸然学习源码实现,非常容易陷入混乱和迷惑的状态,从而极大地影响学习体验。
本书将从多个方面介绍Flink原理实现与源码,包括Flink各类编程接口的设计和实现以及集群运行时等内部原理。
全书共8章:
- 第1章介绍Flink设计理念与基本架构;
- 第2章介绍DataStream的设计与实现;
- 第3章介绍运行时的核心原理与实现,包括Dispatcher、ResourceManager以及JobManager等核心组件的源码级解析和介绍;
- 第4章介绍Flink任务提交与执行的整体流程,包括客户端实现、运行时作业执行过程、JobGraph及ExecutionGraph图转换等;
- 第5章介绍不同的集群部署模式,包括On Yarn、On Kubernetes等;
- 第6章介绍状态管理与容错,包括不同类型状态后端的设计与实现;
- 第7章介绍Flink网络通信,包括RPC通信以及基于Netty实现的网络栈;
- 第8章介绍Flink内存管理,包括MemorySegment的设计与实现等。
目录
前 言
第1章 Flink设计理念与基本架构
1.1 Flink基本设计思想
1.1.1 Stratosphere系统架构
1.1.2 DataFlow模型的设计思想
1.1.3 分布式异步快照算法
1.2 Flink整体架构
1.2.1 架构介绍
1.2.2 Flink集群架构
1.2.3 核心概念
1.3 Flink源码分析与编译
1.3.1 源码编译
1.3.2 源码调试环境搭建
1.4 本章小结
第2章 DataStream的设计与实现
2.1 DataStream API的主要组成
2.1.1 DataStream API应用实例
2.1.2Transformation详解
2.2 StreamOperator的定义与实现
2.2.1 StreamOperator接口实现
2.2.2 OneInputStreamOperator与TwoInputStreamOperator 31
2.2.3 StreamOperatorFactory详解
2.3 Function的定义与实现
2.3.1 RichFunction详解
2.3.2 SourceFunction与SinkFunction 38
2.3.3 ProcessFunction的定义与实现
2.4 TimerService的设计与实现
2.4.1 时间概念与Watermark 47
2.4.2 TimerService时间服务
2.5 DataStream核心转换
2.5.1 KeyedStream与物理分区
2.5.2 WindowedStream的设计与实现
2.6 本章小结
第3章 运行时的核心原理与实现
3.1 运行时的整体架构
3.1.1 运行时整体架构概览
3.1.2 集群的启动与初始化
3.2 运行时组件的创建和启动
3.2.1 集群组件的创建和启动
3.2.2 WebMonitorEndpoint的创建与初始化
3.2.3 Dispatcher的创建与初始化
3.2.4 ResourceManager的创建与初始化
3.2.5 TaskManager的创建与启动
3.3 集群资源管理
3.3.1 ResourceManager详解
3.3.2 ResourceManagerGateway接口实现
3.3.3 Slot计算资源管理
3.4 系统高可用与容错
3.4.1 HighAvailabilityServices的设计与实现
3.4.2 基于ZooKeeper实现高可用
3.4.3 JobGraphStore的设计与实现
3.5 本章小结
第4章 任务提交与执行
4.1 客户端作业提交
4.1.1 命令行提交
4.1.2 创建和初始化CLIFrontend 148
4.1.3 PackagedProgram构造
4.2 ExecutionEnvironment初始化
4.2.1 ExecutionEnvironment类型
4.2.2 StreamExecutionEnvironment详解
4.3 将Pipeline转换成JobGraph 161
4.3.1 用Transformation生成StreamGraph 162
4.3.2 将StreamGraph转换为JobGraph 169
4.3.3 将JobGraph提交到集群运行时
4.4 JobGraph的接收与运行
4.4.1 JobGraph提交整体流程
4.4.2 Dispatcher任务与分发
4.4.3 JobManager启动与初始化
4.4.4 JobMaster详解
4.5 ExecutionGraph的调度与执行
4.5.1 ExecutionGraph生成
4.5.2 SchedulerNG调度器
4.6 Task的执行与注销
4.6.1 Task的启动与注销
4.6.2 AbstractInvokable的加载与初始化
4.6.3 StreamTask详解
4.6.4 StreamTask线程模型
4.6.5 Task重启与容错策略
4.7 本章小结
第5章 集群部署模式
5.1 基本概念
5.1.1 ClusterClient的创建与获取
5.1.2 ClusterEntrypoint集群启动类
5.2 Flink On Yarn的设计与实现
5.2.1 Yarn架构的设计与实现
5.2.2 Session集群的部署与启动
5.2.3 YarnResourceManager详解
5.3 Flink On Kubernetes的设计与实现
5.3.1 Flink On Kubernetes架构
5.3.2 Session集群的部署与启动
5.3.3 KubernetesResourceManager详解
5.4 本章小结
第6章 状态管理与容错
6.1 状态数据管理
6.1.1 状态数据类型
6.1.2 状态初始化流程
6.2 KeyedState的创建与管理
6.2.1 KeyedStateBackend的整体设计
6.2.2 HeapKeyedStateBackend的实现
6.3 OperatorState的创建与管理
6.3.1 OperatorStateBackend的整体设计
6.3.2 基于DefaultOperatorState-Backend创建OperatorState 296
6.4 StateBackend详解
6.4.1 StateBackend的整体设计
6.4.2 MemoryStateBackend的实现
6.5 Checkpoint的设计与实现
6.5.1 Checkpoint的实现原理
6.5.2 Checkpoint的触发过程
6.6 本章小结
第7章 网络通信
7.1 集群RPC通信机制
7.1.1 Flink RPC框架的整体设计
7.1.2 AkkaRpcService详解
7.1.3 RpcServer动态代理实现
7.1.4 AkkaRpcActor的设计与实现
7.1.5 集群组件之间的RPC通信
7.2 NetworkStack的设计与实现
7.2.1 NetworkStack概览
7.2.2 StreamTask数据流
7.2.3 RecordWriter详解
7.2.4 ShuffleMaster与Shuffle-Environment 394
7.2.5 ResultPartition与InputGate详解
7.2.6 ConnectManager的设计与实现
7.2.7 NetworkBuffer资源管理
7.3 基于信用值的反压机制实现
7.3.1 反压机制理论基础
7.3.2 基于信用值的反压机制详解
7.4 本章小结
第8章 内存管理
8.1 内存管理概述
8.1.1 积极的内存管理
8.1.2 Flink内存模型
8.2 MemorySegment的设计与实现
8.2.1 MemorySegment架构概览
8.2.2 MemorySegment详解
8.2.3 MemorySegment内存使用
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 数据序列化与反序列化
8.4.1 TypeInformation类型系统
8.4.2 RecordSerializer与RecordDeserializer 508
8.5 本章小结