作者 |
张利兵 |
丛书名 |
大数据技术丛书 |
出版社 |
机械工业出版社 |
ISBN |
9782108121790 |
简要 |
简介 |
内容简介书籍计算机书籍 ---------------------------8083126 - Flink设计与实现:核心原理与源码解析--------------------------- 内容简介 这是一本从源代码角度剖析Flink设计思想、架构原理以及各功能模块的底层实现原理的著作。 作者是Flink领域的资深技术专家和架构师,对Flink的源代码进行了深入分析和解读,同时融入了自己丰富的工程实践经验,既能让理解Flink的设计与实现原理,又能为他们解决性能优化等实际应用问题提供源码级别的指导。源码大多艰涩难懂,为了降低读者的学习门槛,本书提供了大量架构设计图、UML图和代码注释。 通过阅读本书,你将: ?彻底掌握Flink源码设计与实现 ?深度掌握Flink作业运行流程 ?深入了解Flink部署模式实现原理 ?深度掌握Flink Runtime设计和实现原理 ?庖丁解牛Flink网络通信原理 ?探索Flink内存管理实现 ?深入了解Flink接口设计 ?从Flink源码中学习架构设计经验 . ---------------------------8058977 - Flink原理、实战与性能优化--------------------------- 内容简介 这是一部以实战为导向,能指导读者零基础掌握Flink并快速完成进阶的著作,从功能、原理、实战和调优等4个维度循序渐进地讲解了如何利用Flink进行分布式流式应用开发。作者是该领域的资深专家,现就职于第四范式,曾就职于明略数据。 全书一共10章,逻辑上可以分为三个部分: 第一部分(第1~2章) 主要介绍了Flink的核心概念、特性、应用场景、基本架构,开发环境的搭建和配置,以及源代码的编译。 第二部分(第3~9章) 详细讲解了Flink的编程范式,各种编程接口的功能、应用场景和使用方法,以及核心模块和组件的原理和使用。 第三部分(第10章) 重点讲解了Flink的监控和优化,参数调优,以及对反压、Checkpoint和内存的优化。 |
目录 |
[套装书具体书目] 8058977 - Flink原理、实战与性能优化 - 9787111623533 - 机械工业出版社 - 定价 79 8083126 - Flink设计与实现:核心原理与源码解析 - 9787111687832 - 机械工业出版社 - 定价 129 ---------------------------8083126 - 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 ---------------------------8058977 - Flink原理、实战与性能优化--------------------------- 前言 第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 |