新書推薦:
《
不被大风吹倒
》
售價:HK$
65.9
《
人生解忧:佛学入门四十讲
》
售價:HK$
107.8
《
东野圭吾:分身(东野圭吾无法再现的双女主之作 奇绝瑰丽、残忍又温情)
》
售價:HK$
64.9
《
浪潮将至
》
售價:HK$
86.9
《
在虚无时代:与马克斯·韦伯共同思考
》
售價:HK$
57.2
《
斯大林格勒:为了正义的事业(格罗斯曼“战争二部曲”的第一部,《生活与命运》前传)
》
售價:HK$
184.8
《
日内交易与波段交易的资金风险管理
》
售價:HK$
85.8
《
自然信息图:一目了然的万物奇观
》
售價:HK$
140.8
|
編輯推薦: |
1. 作者团队权威:9位行业专家联袂推荐,带你参透Flink的内核原理。
2. 内容全面详实:从Flink的基本思想、原理到其后期的技术实现与管理。
3. 读者覆盖面广:从大数据开发、架构人员到性能优化运维工程师。
|
內容簡介: |
《Flink内核原理与实现》既讲解了Flink的入门、安装、流计算开发入门、类型和序列化系统、监控运维、安全管理配置等基础知识,又讲解了Flink的时间概念、Window的实现原理及其代码解析,Flink的容错机制原理,Flink容错的关键设计、代码实现分析,Flink Job从源码到执行整个过程的解析,Flink Job的调度策略、资源管理策略、内存管理、数据交换的关键设计和代码实现分析,Flink的RPC通信框架等深度内容。
《Flink内核原理与实现》适合对实时计算感兴趣的大数据开发、运维领域的从业人员阅读,此外对机器学习工程技术人员也有所帮助。
|
關於作者: |
1. 冯飞,有 10余年IT研发经验,专注于大数据相关技术领域,持续跟踪研究大数据计算引擎的理论模型及其演进,深入研读Flink、Apache Beam、Spark等的源码,尤其精通Flink。目前从事批流AI融合的新一代数据仓库设计、研发等工作。
2. 崔鹏云,毕业于北京邮电大学,获硕士学位,曾在MicroSoft和Teradata国外知名企业的研发中心供职9年,有15年的企业级海量数据离线和在线分析技术应用实战经验,拥有国内外众多TB及PB级大数据客户实时数据处理和分析落地能力。
3. 陈冠华,毕业于北京大学计算机软件与理论专业,获博士学位。2009~2011年在北京大学从事博士后研究工作,研究领域包括大数据内存及实时计算技术、数据仓库、数据挖掘和机器学习等,有超过15年的海量数据离线和在线处理技术的学术研究与实践经验。
|
目錄:
|
序
前言
第1章 Flink入门
1.1 核心特点
1.1.1 批流一体
1.1.2 可靠的容错能力
1.1.3 高吞吐、低延迟
1.1.4 大规模复杂计算
1.1.5 多平台部署
1.2 架构
1.2.1 技术架构
1.2.2 运行架构
1.3 Flink的未来
1.4 准备工作
1.5 总结
第2章 Flink应用
2.1 Flink应用开发
2.2 API层次
2.3 数据流
2.4 数据流API
2.4.1 数据读取
2.4.2 处理数据
2.4.3 数据写出
2.4.4 旁路输出
2.5 总结
第3章 核心抽象
3.1 环境对象
3.1.1 执行环境
3.1.2 运行时环境
3.1.3 运行时上下文
3.2 数据流元素
3.3 数据转换
3.4 算子
3.4.1 算子行为
3.4.2 Flink算子
3.4.3 Blink算子
3.4.4 异步算子
3.5 函数体系
3.5.1 函数层次
3.5.2 处理函数
3.5.3 广播函数
3.5.4 异步函数
3.5.5 数据源函数
3.5.6 输出函数
3.5.7 检查点函数
3.6 数据分区
3.7 连接器
3.8 分布式ID
3.9 总结
第4章 时间与窗口
4.1 时间类型
4.2 窗口类型
4.3 窗口原理与机制
4.3.1 WindowAssigner
4.3.2 WindowTrigger
4.3.3 WindowEvictor
4.3.4 Window函数
4.4 水印
4.4.1 DataStream Watermark生成
4.4.2 Flink SQL Watermark生成
4.4.3 多流的Watermark
4.5 时间服务
4.5.1 定时器服务
4.5.2 定时器
4.5.3 优先级队列
4.6 窗口实现
4.6.1 时间窗口
4.6.2 会话窗口
4.6.3 计数窗口
4.7 总结
第5章 类型与序列化
5.1 DataStream类型系统
5.1.1 物理类型
5.1.2 逻辑类型
5.1.3 类型推断
5.1.4 显式类型
5.1.5 类型系统存在的问题
5.2 SQL类型系统
5.2.1 Flink Row
5.2.2 Blink Row
5.2.3 ColumnarRow
5.3 数据序列化
5.3.1 数据序列化反序列化
5.3.2 String序列化过程示例
5.3.3 作业序列化
5.3.4 Kryo序列化
5.4 总结
第6章 内存管理
6.1 自主内存管理
6.2 内存模型
6.2.1 内存布局
6.2.2 内存计算
6.3 内存数据结构
6.3.1 内存段
6.3.2 内存页
6.3.3 Buffer
6.3.4 Buffer资源池
6.4 内存管理器
6.4.1 内存申请
6.4.2 内存释放
6.5 网络缓冲器
6.5.1 内存申请
6.5.2 内存回收
6.6 总结
第7章 状态原理
7.1 状态类型
7.1.1 KeyedState与OperatorState
7.1.2 原始和托管状态
7.2 状态描述
7.3 广播状态
7.4 状态接口
7.4.1 状态操作接口
7.4.2 状态访问接口
7.5 状态存储
7.5.1 内存型和文件型状态存储
7.5.2 基于RocksDB的StateBackend
7.6 状态持久化
7.7 状态重分布
7.7.1 OperatorState重分布
7.7.2 KeyedState重分布
7.8 状态过期
7.8.1 DataStream中状态过期
7.8.2 Flink SQL中状态过期
7.8.3 状态过期清理
7.9 总结
第8章 作业提交
8.1 提交流程
8.1.1 流水线执行器PipelineExecutor
8.1.2 Yarn Session提交流程
8.1.3 Yarn Per-Job提交流程
8.1.4 K8s Session提交流程
8.2 Graph总览
8.3 流图
8.3.1 StreamGraph核心对象
8.3.2 StreamGraph生成过程
8.3.3 单输入物理Transformation的转换示例
8.3.4 虚拟Transformation的转换示例
8.4 作业图
8.4.1 JobGraph核心对象
8.4.2 JobGraph生成过程
8.4.3 算子融合
8.5 执行图
8.5.1 ExecutionGraph核心对象
8.5.2 ExecutionGraph生成过程
8.6 总结
第9章 资源管理
9.1 资源抽象
9.2 资源管理器
9.3 Slot管理器
9.4 SlotProvider
9.5 Slot选择策略
9.6 Slot资源池
9.7 Slot共享
9.8 总结
第10章 作业调度
10.1 调度
10.2 执行模式
10.3 数据交换模式
10.4 作业生命周期
10.4.1 作业生命周期状态
10.4.2 Task的生命周期
10.5 关键组件
10.5.1 JobMaster
10.5.2 TaskManager
10.5.3 Task
10.5.4 StreamTask
10.6 作业启动
10.6.1 JobMaster启动作业
10.6.2 流作业启动调度
10.6.3 批作业调度
10.6.4 TaskManger启动Task
10.7 作业停止
10.8 作业失败调度
10.8.1 默认作业失败调度
10.8.2 遗留的作业失败调度
10.9 组件容错
10.9.1 容错设计
10.9.2 HA服务
10.9.3 JobMaster的容错
10.9.4 ResourceManager容错
10.9.5 TaskManager 的容错
10.10 总结
第11章 作业执行
11.1 作业执行图
11.2 核心对象
11.2.1 输入处理器
11.2.2 Task输入
11.2.3 Task输出
11.2.4 结果分区
11.2.5 结果子分区
11.2.6 有限数据集
11.2.7 输入网关
11.2.8 输入通道
11.3 Task执行
11.3.1 Task处理数据
11.3.2 Task处理Watermark
11.3.3 Task处理StreamStatus
11.3.4 Task处理LatencyMarker
11.4 总结
第12章 数据交换
12.1 数据传递模式
12.2 关键组件
12.2.1 RecordWriter
12.2.2 数据记录序列化器
12.2.3 数据记录反序列化器
12.2.4 结果子分区视图
12.2.5 数据输出
12.3 数据传递
12.3.1 本地线程内的数据传递
12.3.2 本地线程间的数据传递
12.3.3 跨网络的数据传递
12.4 数据传递过程
12.4.1 数据读取
12.4.2 数据写出
12.4.3 数据清理
12.5 网络通信
12.5.1 网络连接
12.5.2 无流控
12.5.3 基于信用的流控
12.6 总结
第13章 应用容错
13.1 容错保证语义
13.2 检查点与保存点
13.3 作业恢复
13.3.1 检查点恢复
13.3.2 保存点恢复
13.3.3 恢复时的时间问题
13.4 关键组件
13.4.1 检查点协调器
13.4.2 检查点消息
13.5 轻量级异步分布式快照
13.5.1 基本概念
13.5.2 Barrier对齐
13.6 检查点执行过程
13.6.1 JobMaster触发检查点
13.6.2 TaskExecutor执行检查点
13.6.3 JobMaster确认检查点
13.7 检查点恢复过程
13.8 端到端严格一次
13.8.1 两阶段提交协议
13.8.2 两阶段提交实现
13.9 总结
第14章 Flink SQL
14.1 Apache Calcite
14.1.1 Calcite是什么
14.1.2 Calcite的技术特点
14.1.3 Calcite的主要功能
14.1.4 Calcite的核心原理
14.2 动态表
14.2.1 流映射为表
14.2.2 连续查询
14.2.3 流上SQL查询限制
14.2.4 表到流的转换
14.3 TableEnvironment
14.3.1 TableEnvironment体系
14.3.2 TableEnvironment使用示例
14.4 Table API
14.5 SQL API
14.6 元数据
14.6.1 元数据管理
14.6.2 元数据分类
14.7数据访问
14.7.1Table Source
14.7.2Table Slink
14.8 SQL函数
14.9 Planner关键抽象
14.9.1 Expression
14.9.2 ExpressionResolver
14.9.3 Operation
14.9.4 QueryOperation
14.9.5 物理计划节点
14.10 Blink Planner和Flink Planner对比
14.11 Blink与Calcite关系
14.12 Blink SQL执行过程
14.12.1 从SQL到Operation
14.12.2 Operation到Transformation
14.13 Blink Table API执行过程
14.13.1 Table API到Operation
14.13.2 Operation到Transformation
14.14 Flink与Calcite的关系
14.15 Flink SQL执行过程
14.15.1 SQL 到Operation
14.15.2 Operation到DataStreamDataSet
14.16 Flink Table API执行过程
14.17 SQL优化
14.18 Blink优化
14.18.1 优化器
14.18.2 代价计算
14.18.3 优化过程
14.18.4 优化规则
14.18.5 公共子图
14.19 Flink优化
14.19.1 优化器
14.19.2 优化过程
14.19.3 优化规则
14.20 代码生成
14.20.1 为什么进行代码生成
14.20.2 代码生成范围
14.20.3 代码生成示例
14.21 总结
第15章 运维监控
15.1 监控指标
15.2 指标组
15.3 监控集成
15.4 指标注册中心
15.5 指标查询服务
15.6 延迟跟踪实现原理
15.7 总结
第16章 RPC框架
16.1 Akka简介
16.1.1 Akka是什么
16.1.2 使用Akka
16.1.3 Akka的通信
16.2 RPC消息的类型
16.3 RPC通信组件
16.3.1 RpcGateway
16.3.2 RpcEndpoint
16.3.3 RpcService
16.3.4 RpcServer
16.3.5 AkkaRpcActor
16.4 RPC交互过程
16.4.1 RPC请求发送
16.4.2 RPC请求响应
16.5总结
专家寄语
参考文献
|
內容試閱:
|
关于本书
随着Flink的应用越来越广泛,关于Flink的书籍、文章也越来越多,但是系统性地阐述Flink设计原理和实现方法的书籍却很少。本书的核心目标是对Flink的设计与原理做一个比较系统的介绍,尽量将Flink的核心原理与其实现细节呈现给读者,但是由于篇幅有限,加之Flink体系庞大且复杂,本书难以将其细节一一呈现,只能选择重点部分加以阐述,如有疏漏、谬误之处还请包涵。各个大数据计算引擎在原理上类似,但在设计取向和实现方法上会有不同。希望通过阅读本书,读者能够对分布式计算引擎有更加深入的理解,开拓视野。
关于如何使用Flink,业内已经有相关书籍、官方文档、网络技术文章可以参考,因此本书不是介绍如何开发Flink应用,而是以Word Count经典案例贯穿本书,作为讲解和演示。《Flink内核原理与实现》涉及的Hadoop、Yarn、K8s、Mesos、Kafka等Flink之外的大数据领域的组件,不是本书主要介绍的内容,读者可以阅读相应的书籍,也可以参考网上的技术文章。
适合人群
《Flink内核原理与实现》特别适合穷理以致其知,反躬以践其实的人阅读,具体有以下人群。
● 愿意深入了解Flink设计与实现原理的Flink开发者。
● 对流计算感兴趣的大数据开发人员、技术爱好者。
● 对性能优化和部署感兴趣的运维工程师与架构师。
● 对Flink感兴趣的Spark开发人员、架构师。
阅读建议
建议首先通读本书,对Flink建立一个基本的认识,了解其核心流程,不同的组件及其作用、相互之间的关联关系,避免沉浸在细节中,窥一斑不见全貌。有了总体的认识之后,再有针对性地了解细节。
《Flink内核原理与实现》内容大概分为三大部分:基础知识、核心执行、运维管理。
基础知识包含第1~7章。第1章是总体性的介绍;第2章介绍Flink应用中的基本概念及其API层;第3~7章介绍Flink底层运行的核心抽象及其实现,如内存管理、时间与窗口、类型与序列化、状态原理等。
核心执行包含第8~14章。其中第8~13章是Flink作业提交、执行、应用容错等方面实现原理的介绍;第14章是Flink SQL实现原理的介绍,未来SQL是比较重要的应用开发方式。
运维管理包含第15、16章。第15章是Flink运维监控原理的介绍;第16章是Flink集群内部的通信框架介绍。
强烈建议各位读者,不要从学习的角度去阅读本书,而是从设计一个批流一体的大数据计算引擎的角度来进行阅读,思考作为设计者必须要解决哪些问题,如何解决这些问题。
《Flink内核原理与实现》以Flink 1.10版本为基础编写,随着Flink的演进,后续将会持续更新,敬请期待。
读者沟通
在阅读本书的过程中,读者若遇到任何问题、有任何建议,都可以向deep_in_flink@126.com发送邮件,或者在https:github.comffly1985deep-in-flink上提交issue,对于读者比较关注的内容,编者将在后续版本中丰富完善。
致谢
感谢我们所生活的时代,这是一个信息爆炸的时代,数据量呈指数级增长,大数据的技术快速发展,数据处理的手段也在不断进化,实时智能时代的到来使得本书有了面世的机会。
感谢为 Flink 的发展壮大付出辛苦努力的社区,为了 Flink 的完善、推广付出巨大努力的阿里 Flink 团队,还有其他分享 Flink 经验的各行业领军企业,正是有了它们共同的努力,才使得 Flink 成为流计算事实上的标准。
感谢中国移动信息技术中心的领导尚晶、郭志伟、武智晖、刘辉等,在本书编写过程中,他们给了很多思路和意见。同时与中国移动各省分公司的集中交流、研讨,也使得Flink在运营商领域的位置计算、业务信息补全、复杂事件处理等实时计算场景下的适用性得到了印证。
感谢编者所在公司给予的良好技术氛围和工作环境,使得作者能够全心全意投入到技术的研究中,同时要感谢同事张文霞、孙得强、李运波、王茂均、赵红岩花费了大量时间分享 Flink 的实战经验、提出建议、书稿勘误,使得本书的内容得以持续完善。
|
|