新書推薦:
《
养育不好惹的小孩
》
售價:NT$
352.0
《
加加美高浩的手部绘画技法 II
》
售價:NT$
407.0
《
卡特里娜(“同一颗星球”丛书)
》
售價:NT$
398.0
《
伟大民族:从路易十五到拿破仑的法国史(方尖碑)
》
售價:NT$
857.0
《
古今“书画同源”论辨——中国书法与中国绘画的关系问题兼中国画笔墨研究
》
售價:NT$
602.0
《
《日本文学史序说》讲演录
》
售價:NT$
332.0
《
无尽的海洋:美国海事探险与大众文化(1815—1860)
》
售價:NT$
454.0
《
治盗之道:清代盗律的古今之辨
》
售價:NT$
556.0
|
編輯推薦: |
作者背景资深:4位作者均是Flink的早期实践者和布道者,不仅参与了国内早期的Flink项目,而且参与Flink源码的维护和改造。大厂经验总结:作者在阿里巴巴、蚂蚁集团、滴滴等企业参与和主导了多个Flink项目从0到1的过程,本书是他们在这些企业大规模应用Flink的经验总结。源码全面剖析:本书从源码角度深入剖析了Flink各功能模块的架构与实现,能指导读者更好地进行性能调优、可用性保障、效能优化、二次开发
|
內容簡介: |
内容简介这是一部从源代码角度出发,通过分析Flink的各个功能模块的实现来剖析Flink的架构设计和实现原理的著作。它将能指导读者更好地对Flink进行性能调优、可用性保障、效能优化和二次开发。四位作者都是非常资深的Flink专家,部分作者是Flink源代码的维护者和改造者,本书总结了他们在阿里巴巴、蚂蚁集团、滴滴等企业的大规模Flink实践经验。全书共11章,主要内容如下。第1章 阅读Flink源代码前的准备主要介绍了Flink源代码的获取、编译、调试,以及它的目录结构、设计理念和基本架构。此外,还分析了Flink与Hadoop MapReduce、Spark在设计上的差异。第2~8章 Flink功能模块源代码和架构解析从源码角度分析了Flink的编程模型与API、运行时组件与通信、状态管理与容错、任务提交与执行、Flink网络栈、Flink Connector、部署模式等功能模块的原理。力求让读者深入理解Flink的原理,而不只是跟着本书读一遍Flink源代码。原理和思想是不局限于某一个框架和技术,了解了Flink的原理和思想,可以将其扩展到其他框架和技术上。第9~10章 Flink Table、SQL与Flink CEP编程方式逐渐从原先基于Map-Reduce的任务模式向SQL化演进,SQL意味着标准和效率。这两章重点讲解了StreamTableEnvironment的实现过程、SQL的解析过程、Table Connector以及Flink CEP的内部实现原理。第11章 Flink监控主要讲解了Flink的监控指标、常用系统指标和监控体系的建设,以及常用的定位手段。
|
關於作者: |
作者简介罗江宇Flink技术专家,先后就职于新浪微博、滴滴和某大型电商公司。先后主导或参与了多家公司的Flink实时计算服务的构建、对超大规模集群的维护以及Flink引擎的改造。拥有丰富的实时计算实战经验,目前专注于Kubernetes调度、Flink SQL及Flink流批一体化方向。赵士杰资深大数据技术专家,曾就职于滴滴、阿里巴巴等一线互联网公司。从0到1深度参与了滴滴的大数据建设,拥有非常丰富的大数据平台一线建设经验,对于大数据领域的计算和存储引擎也有深入研究。李涵淼大数据研发专家,曾任滴滴大数据开发工程师。从事大数据领域工作多年,参与过多家公司流计算平台的设计与研发,目前专注于批流一体、OLAP技术方向的研究与应用。闵文俊蚂蚁集团技术专家、开源大数据社区爱好者、Flink Contributor,在实时计算领域工作多年,深度参与了滴滴、蚂蚁集团的实时计算平台建设。
|
目錄:
|
前 言第1章 阅读Flink源代码前的准备 11.1 环境准备 11.2 获取、编译和调试Flink的源代码 41.2.1 获取与导入Flink源代码 41.2.2 编译与调试Flink源代码 61.3 Flink源代码的目录结构 91.4 Flink设计理念与基本架构 111.4.1 Flink与主流计算引擎对比 111.4.2 Flink基本架构 141.5 本章小结 17第2章 编程模型与API 182.1 DataStream 182.2 算子 212.3 窗口 282.3.1 窗口的基本概念 282.3.2 窗口的执行流程 302.3.3 窗口分配器 322.3.4 触发器 372.3.5 窗口函数 412.4 本章小结 43第3章 运行时组件与通信 443.1 运行时组件 443.1.1 REST 453.1.2 Dispatcher 543.1.3 ResourceManager 613.1.4 JobMaster 753.1.5 TaskExecutor 853.2 组件间通信 953.2.1 Akka与Actor模型 953.2.2 组件间通信实现 993.3 运行时组件的高可用 1173.3.1 Master节点上组件的高可用 1173.3.2 现有运行时组件高可用存在的问题及其解决方案 1263.4 本章小结 128第4章 状态管理与容错 1294.1 状态 1294.1.1 状态的原理与实现 1294.1.2 状态生存时间的原理与实现 1344.2 检查点 1374.2.1 检查点机制原理 1374.2.2 检查点执行过程 1374.2.3 任务容错 1404.3 状态后端 1434.4 本章小结 148第5章 任务提交与执行 1495.1 任务提交整体流程 1495.2 DAG转换 1525.2.1 DAG的4层转换 1525.2.2 WordCount转换过程 1525.3 Slot分配 1605.3.1 相关概念和实现类 1605.3.2 Slot申请流程 1625.3.3 任务部署 1685.4 任务执行机制 1705.4.1 任务执行过程 1705.4.2 MailBox线程模型 1745.5 本章小结 177第6章 Flink网络栈 1786.1 内存管理 1786.2 网络传输 1826.2.1 什么是Flink网络栈 1826.2.2 非流控模型的网络传输流程 1846.2.3 流控模型的网络传输流程 1976.3 流批一体的shuffle架构 1996.3.1 生命周期管理 1996.3.2 数据shuffle 2076.4 本章小结 208第7章 Flink Connector的设计与实现 2097.1 Kafka Connector实现原理 2097.1.1 Kafka Source Connector实现 2097.1.2 Kafka Sink Connector 实现 2167.2 HBase Table Connector 实现原理 2207.2.1 HBase Source Connector和Sink Connector的工厂实现 2217.2.2 HBase维表实现 2227.3 本章小结 224第8章 部署模式 2258.1 Local部署 2258.2 Standalone部署 2288.3 Flink on YARN模式 2408.3.1 YARN基本架构 2408.3.2 Flink on YARN模式介绍 2418.3.3 Flink on YARN启动过程 2438.4 Flinkon Kubernetes模式 2608.5 本章小结 265第9章 Flink Table与SQL 2669.1 StreamTableEnvironment类介绍 2669.1.1 StreamExecution-Environment类 2679.1.2 EnvironmentSettings类 2679.1.3 TableConfig类 2689.1.4 StreamTableEnvironment的创建过程 2699.2 SQL解析过程 2709.2.1 SQL解析 2709.2.2 SQL优化 2779.2.3 RelNode转换 2799.3 Table Connector 2819.3.1 TableSource 2829.3.2 TableSink 2869.3.3 SPI机制在Table Connector中的应用 2889.4 UDF与内置算子 2929.4.1 UDF 2929.4.2 内置算子 2949.5 本章小结 297第10章 Flink CEP 原理解析 29810.1 CEP的基本概念 29810.1.1 什么是Flink CEP 29810.1.2 Pattern 29810.1.3 量词 30010.1.4 条件 30110.1.5 连接 30210.1.6 Flink CEP作业编写举例 30210.2 CEP内部实现原理 30410.2.1 NFA简介 30510.2.2 匹配过程 30510.2.3 CEP状态存储 31010.2.4 CEP和SQL结合 31310.3 本章小结 315第11章 Flink监控 31611.1 监控指标 31611.1.1 指标类型 31611.1.2 系统指标及自定义指标 31811.1.3 指标的使用 31911.2 常用系统指标 32211.3 监控体系建设 32411.3.1 指标监控及展示 32411.3.2 日志分析处理 32611.3.3 定位手段 32611.4 本章小结 327
|
內容試閱:
|
为什么要写本书近些年来,流计算技术发展迅速,被广泛应用于数据ETL、数据BI、实时数据仓库建设和AI等方面。Flink作为流计算领域的一颗璀璨的明星,自问世以来发展迅猛,其技术生态圈也日益壮大,现已成为Apache开源项目中活跃的项目之一。很多企业选择用Flink来构建其流计算体系或流批一体体系,使用on YARN或on Kubernetes部署模式来进行大规模生产。转眼间,我从事Flink研发工作已经4年,其间我对Flink 的1.2、1.3、1.5、1 .8、1.9、1.11 和1.13版本源代码进行维护和改造,提供Flink 大规模集群生产支持,并在公司内提供业务解决方案。在为业务方提供支持的过程中,我逐渐萌生写一本剖析Flink内部机制的书的想法,原因有二。其一,随着流计算的流行和应用于大规模生产,公司对Flink的性能、可用性和效能等方面的要求更加迫切,因而更加需要流计算方面的人才,尤其是拥有Flink性能调优、可用性和效能等方面经验的人才。而单纯查看官方文档,对Flink机制的认识只能流于黑盒形式。只有深入源代码才能深刻理解Flink 的内部机制,才能更好地进行性能调优,做好可用性保障和优化,以及做好效能方面的优化。其二,市场上缺少深入剖析Flink源代码和设计的图书。我希望借助自己多年从事大规模生产以及进行多个Flink 版本维护与改造的经验,对Flink 的设计与实现进行深入剖析,帮助读者更好地了解Flink源代码与机制。通过了解源代码,读者能有以下收获:编写出更健壮的流计算代码;更好地对流计算作业进行调优,使得作业性能更高;更好地维护Flink引擎,并对Flink引擎进行二次开发。读者对象本书适合以下几类人员阅读:流计算开发人员、大数据开发人员;大数据架构人员;对Flink计算引擎底层感兴趣的相关人员。本书特色基于使用方式及其背后的原理、原理背后的设计及源代码实现来剖析Flink内部机制,由浅入深。尽量用图来展示原理和机制,以便于读者理解。尽可能结合实际生产分析Flink 内部机制,对读者的实际生产具有指导意义。讲解的设计和实现原理有助于读者提升架构设计与实现能力。本书结构与内容本书基于Flink 1.9版本的源代码来解析Flink。全书共11章,主要内容如下。第1章 阅读Flink源代码前的准备主要介绍Flink源代码阅读环境准备以及Flink的设计理念和基本架构,包括Flink源代码的导入流程和调试方式,Flink与Hadoop MapReduce、Spark的设计差异,以及Flink的分层架构和运行时架构。第2章 编程模型与API主要介绍Flink DataStream的算子的使用和实现原理。首先讲解DataStream底层的转换,接着介绍常用算子(如FlatMap、Join、Aggregation、Union),后解析窗口的设计与实现。第3章 运行时组件与通信深入剖析运行时组件、组件间通信及运行时组件的高可用。首先介绍运行时组件REST、Dispatcher、ResourceManager、JobMaster和TaskExecutor,接着介绍运行时组件间通信的框架Akka,并以Slot申请为例讲解运行时组件之间的通信,后介绍运行时组件高可用的功能、存在的问题及其解决方案。第4章 状态管理与容错从状态、检查点、状态后端三个概念入手,对Flink状态管理和容错的设计与实现进行深度剖析。第5章 任务提交与执行主要介绍Flink任务提交的整个流程,从客户端、JobManager和TaskManager端对应任务各个阶段的转换入手进行深入的梳理与分析。第6章 Flink网络栈首先介绍Flink的内存管理机制,然后讲解什么是Flink网络栈以及网络传输流程,其中涵盖Flink的两种背压实现方式,后介绍流批一体的shuffle架构的设计和实现。第7章 Flink Connector的设计与实现首先以Kafka Connector为切入点介绍Connector模块设计时需要考虑的消费、分区管理、一致性语义保障等关键问题,然后以HBase为例介绍SQL/Table Connector的使用和实现原理。第8章 部署模式主要介绍Flink中常用的三种部署模式:Local模式、Standalone模式和第三方部署模式。首先介绍用于本地调试的Local模式、Standalone模式中Session模式的构建与实现,然后介绍Flink on YARN的Session模式和Per-Job模式的设计与实现,后介绍Flink on Kubernetes基于YAML的实现。第9章 Flink Table与SQL主要介绍Flink Table与SQL中StreamTableEnvironment的实现过程、SQL的解析过程、Table Connector以及UDF和内置算子的实现。第10章 Flink CEP原理解析主要介绍Flink CEP的基本概念和语法,如何使用Flink CEP编写作业,以及 Flink CEP内部基于NFA的实现原理。第11章 Flink监控主要介绍Flink监控指标、常用系统指标和监控体系的建设,以及常用的定位手段。勘误与支持由于作者的水平有限,加之写作时间仓促,书中难免存在不妥之处。为此,我们在GitHub上创建了本书专属工程(https://github.com/streaming-olap/deep-in-flink-book)来支持在线反馈。大家如有任何意见或建议,欢迎在该工程下创建issue,我们会
|
|