猜你喜欢
深入理解Flink核心设计与实践原理

深入理解Flink核心设计与实践原理

书籍作者:刘洋 ISBN:9787121399114
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:8320
创建日期:2021-02-14 发布日期:2021-10-07
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
下载地址
内容简介

《深入理解Flink核心设计与实践原理》从Apache Flink的缘起开始,由浅入深,理论结合实践,全方位地介绍Apache Flink这一处理海量数据集的高性能工具。本书围绕部署、流处理、批处理、Table API&SQL四大模块进行讲解,并详细说明Apache Flink的每个特性的实际业务背景,使读者不仅能编写可运行的Apache Flink程序代码,还能深刻理解并正确地将其运用到合适的生产业务环境中。

虽然本书是以Apache Flink技术框架来讲解流计算技术的,但是流计算领域开发所面临的各种问题同样是Java后端开发者在进行服务端开发时所要面临的,如有状态计算、Exactly Once语义等。因此,Apache Flink框架为解决这些问题而设计的方案同样值得Java后端开发者借鉴。

本书适合初级和中级软件工程师阅读,未接触过流计算领域...

作者简介

刘洋

国家认证软件设计师,获得Apache Kylin管理员认证。

现任某上市咨询公司高级咨询顾问,有多年大数据、流式计算方面的开发经验,对Hadoop、Strom、Flink等大数据计算引擎有着非常深入的理解,积累了丰富的项目实践经验。先后利用相关技术为银行、保险、能源等领域的头部企业解决业务痛点。

个人技术博客:www.cnblogs.com/intsmaze

个人Github项目:github.com/intsmaze

编辑推荐
适读人群 :本书适合初级和中级软件工程师阅读,未接触过流计算领域的Java开发者也可以从本书中获益。针对初学者,本书提供Windows环境搭建的演示,使不具备Linux系统操作经验的读者也可以快速学习Apache Flink。

讲解Flink的多种部署方式——单机部署、Standalone模式部署、YARN模式部署及相应的高可用设置。

分析Flink分布式开发的基础概念、Flink的流处理开发的基本功能,包括读取数据和输出数据,以及对数据流进行各种转换操作等,同时还讲解如何对开发的Flink应用程序进行本地测试。

讲解Flink在流处理开发中对有状态计算的支持,包括检查点机制、保存点机制、各种状态后端等。

讲解Flink在流处理开发中的高级功能,如窗口操作、时间处理、连接操作、侧端输出操作,以及自定义数据源和自定义数据接收器,同时讲解Apache Kafka连接器对数据源和数据接收器的支持。

介绍Flink在批处理开发中的基本操作,包括读取数据和输出数据,以及对数据集进行的各种转换操作等。

介绍Flink的Table API和SQL如何统一流处理和批处理,以及Table API和SQL在流处理中的一些特别情况,包括动态表、时间属性和时态表等。

介绍Flink中部署程序的基本操作,包括配置程序的执行参数、程序的并行度、程序的重启策略、发布程序的方式等。

《深入理解Flink核心设计与实践原理》电子书免费下载

pdf下载 txt下载 epub下载 mobi下载 azw3下载

前言

前言



为什么要写这本书?
最近几年,在Apache Flink(简称Flink)社区的推动下,国内越来越多的公司开始应用Flink去解决生产问题。笔者在2019年便开始全面从Storm转到Flink。当时正值Flink在国内推广的起步阶段,相关系统性学习资料较少,因此笔者只能通过阅读Flink官网和浏览Flink框架源码进行学习,踩了不计其数的“雷”。例如,某些特性因为相关描述较少,导致初学者无法真正理解该特性所解决的实际业务背景,或者因为某些特性的示例代码不全,导致初学者无法快速使用该特性编写可运行的代码。本书按照笔者的学习过程来编写大纲,可以帮助初学者快速入门Flink,避免在学习过程中出现各种不必要的问题而浪费时间。

本书内容
本书共10章,其中第2、3、10章是读者必须阅读的章节,其他章节读者可以结合自己的业务情况阅读。
第1章主要介绍Flink分布式处理框架的背景、特性及应用场景。读者可以快速阅读本章以建立对Flink的基本认识。
第2章主要介绍Flink的多种部署方式,重点讲解了它的单机部署、Standalone模式部署、YARN模式部署及相应的高可用设置。读者可以根据自己的业务需求选择其中一种方式搭建Flink。
第3章主要介绍Flink分布式开发的基础概念。这些概念是流处理和批处理开发中的通用概念,为此读者需要仔细阅读本章后再根据自己的业务需求选择阅读相关流处理章节、批处理章节或Table&SQL章节的内容。
第4章主要介绍Flink的流处理开发的基本功能,包括读取数据和输出数据,以及对数据流进行各种转换操作等,同时还讲解了如何对开发的Flink应用程序进行本地测试。读者在阅读完本章后便可以使用Flink进行一些非关键业务程序的开发工作。
第5章主要介绍Flink在流处理开发中对有状态计算的支持,包括检查点机制、保存点机制、各种状态后端等。读者在阅读完本章后便可以使用Flink进行一些关键业务程序的开发工作。
第6章主要介绍Flink在流处理开发中的高级功能,如窗口操作、时间处理、连接操作、侧端输出操作,以及自定义数据源和自定义数据接收器,同时讲解了Apache Kafka连接器对数据源和数据接收器的支持。读者在阅读完本章后便可以使用Flink进行一些关键且复杂的业务程序的开发工作。
第7章主要介绍Flink在批处理开发中的基本操作,包括读取数据和输出数据,以及对数据集进行的各种转换操作等。读者在阅读完本章后便可以使用Flink进行一些离线批处理任务的开发工作。
第8章主要介绍Flink的Table API和SQL如何统一流处理和批处理。Table API和SQL借助Apache Calcite进行查询的解析、校验和优化。它们可以简化用户的开发工作。针对一些常规的业务,开发者只需要写SQL,Flink会自动将SQL转化为流程序或批程序去执行。
第9章主要介绍Table API和SQL在流处理中的一些特别情况,包括动态表、时间属性和时态表等。
第10章主要介绍Flink中部署程序的基本操作,包括配置程序的执行参数、程序的并行度、程序的重启策略、发布程序的方式等。

本书是以Flink 的1.7版本为基础编写的,示例代码均用Java语言进行编写,同时本书的大部分代码均可运行在Flink 的1.8、1.9、1.10版本上。在本书的下载资源中提供了1.8、1.9、1.10版本的变动详情说明,版本变动主要体现在底层优化上,在API的使用方式上并无太大变动,大的差异在于SQL模块(例如在基于流处理的SQL模块中增加了新的特性,以及集成Hive等)。
本书相关资源的下载地址为www.broadview.com.cn/39911。对本书的勘误也可以在此网页上提交。
由于个人能力有限,书中难免有疏漏之处,欢迎读者批评指正。

刘洋

目录

目录



第1章 Apache Flink介绍
1.1 Apache Flink简介
1.1.1 Apache Flink是什么
1.1.2 Apache Flink应用场景
1.2 Apache Flink组件
1.2.1 分层API
1.2.2 作业管理器、任务管理器、客户端
第2章 Apache Flink的安装与部署
2.1 本地模式
2.1.1 安装JDK
2.1.2 下载并安装Flink
2.1.3 本地模式集群
2.1.4 Windows系统部署
2.2 Standalone模式
2.2.1 配置集群免密登录
2.2.2 部署Standalone模式的集群
2.3 YARN模式
2.3.1 在YARN集群中启动一个长期运行的Flink集群
2.3.2 在YARN集群中运行Flink作业
2.3.3 Flink和YARN的交互方式
2.3.4 问题汇总
2.4 Flink集群高可用
2.4.1 Standalone模式下JobManager的高可用
2.4.2 YARN模式下JobManager的高可用
第3章 Apache Flink的基础概念和通用API
3.1 基础概念
3.1.1 数据集和数据流
3.1.2 Flink程序的组成
3.1.3 延迟计算
3.1.4 指定分组数据集合的键
3.1.5 指定转换函数
3.1.6 支持的数据类型
3.2 Flink程序模型
3.2.1 程序和数据流
3.2.2 并行数据流
3.2.3 窗口
3.2.4 时间
3.2.5 有状态计算
3.2.6 容错检查点
3.2.7 状态后端
3.2.8 保存点
3.3 Flink程序的分布式执行模型
3.3.1 任务和任务链
3.3.2 任务槽和资源
3.4 Java的Lambda表达式
3.4.1 类型擦除
3.4.2 类型提示
第4章 流处理基础操作
4.1 DataStream的基本概念
4.1.1 流处理示例程序
4.1.2 数据源
4.1.3 数据流的转换操作
4.1.4 数据接收器
4.2 数据流基本操作
4.2.1 Map
4.2.2 FlatMap
4.2.3 Filter
4.2.4 KeyBy
4.2.5 Reduce
4.2.6 Aggregations
4.2.7 Split和Select
4.2.8 Project
4.2.9 Union
4.2.10 Connect和CoMap、CoFlatMap
4.2.11 Iterate
4.3 富函数
4.3.1 基本概念
4.3.2 代码演示
4.4 任务链和资源组
4.4.1 默认链接
4.4.2 开启新链接
4.4.3 禁用链接
4.4.4 设置任务槽共享组
4.5 物理分区
4.5.1 自定义分区策略
4.5.2 shuffle分区策略
4.5.3 broadcast分区策略
4.5.4 rebalance分区策略
4.5.5 rescale分区策略
4.5.6 forward分区策略
4.5.7 global分区策略
4.6 流处理的本地测试
4.6.1 本地执行环境
4.6.2 集合支持的数据源和数据接收器
4.6.3 单元测试
4.6.4 集成测试
4.7 分布式缓存
4.7.1 注册分布式缓存文件
4.7.2 访问分布式缓存文件
4.7.3 BLOB服务的配置参数
4.7.4 部署到集群中运行
4.8 将参数传递给函数
4.8.1 通过构造函数传递参数
4.8.2 使用ExecutionConfig传递参数
4.8.3 将命令行参数传递给函数
第5章 流处理中的状态和容错
5.1 有状态计算
5.1.1 Operator状态和Keyed状态
5.1.2 托管的Keyed状态
5.1.3 托管的Operator状态
5.2 检查点机制
5.2.1 先决条件
5.2.2 启用和配置检查点机制
5.2.3 目录结构
5.2.4 其他相关的配置选项
5.3 状态后端
5.3.1 MemoryStateBackend
5.3.2 FsStateBackend
5.3.3 RocksDBStateBackend
5.3.4 配置状态后端
5.4 保存点机制
5.4.1 分配操作符id
5.4.2 保存点映射
5.4.3 保存点操作
5.4.4 保存点配置
5.5 广播状态
5.5.1 前置条件
5.5.2 广播函数
5.5.3 代码实现
5.6 调优检查点和大状态
5.6.1 监视状态和检查点
5.6.2 调优检查点
5.6.3 使用异步检查点操作
5.6.4 调优RocksDB
5.6.5 容量规划
5.6.6 压缩
第6章 流处理高级操作
6.1 窗口
6.1.1 窗口的基本概念
6.1.2 窗口分配器
6.1.3 窗口函数
6.1.4 窗口触发器
6.1.5 窗口剔除器
6.1.6 允许数据延迟
6.1.7 窗口的快速实现方法
6.1.8 查看窗口使用组件
6.2 时间
6.2.1 时间语义
6.2.2 事件时间与水印
6.2.3 设置时间特性
6.3 数据流的连接操作
6.3.1 窗口Join
6.3.2 窗口CoGroup
6.3.3 间隔Join
6.4 侧端输出
6.4.1 基于复制数据流的方案
6.4.2 基于Split和Select的方案
6.4.3 基于侧端输出的方案
6.5 ProcessFunction
6.5.1 基本概念
6.5.2 计时器
6.6 自定义数据源函数
6.6.1 SourceFunction接口
6.6.2 ParallelSourceFunction接口
6.6.3 RichParallelSourceFunction抽象类
6.6.4 具备检查点特性的数据源函数
6.7 自定义数据接收器函数
6.7.1 SinkFunction接口
6.7.2 RichSinkFunction抽象类
6.8 数据流连接器
6.8.1 内置连接器
6.8.2 数据源和数据接收器的容错保证
6.8.3 Kafka连接器
6.8.4 安装Kafka的注意事项
6.8.5 Kafka 1.0.0+ 连接器
6.8.6 Kafka消费者
6.8.7 Kafka生产者
6.8.8 Kafka连接器指标
第7章 批处理基础操作
7.1 DataSet的基本概念
7.1.1 批处理示例程序
7.1.2 数据源
7.1.3 数据接收器
7.2 数据集的基本操作
7.2.1 Map
7.2.2 FlatMap
7.2.3 MapPartition
7.2.4 Filter
7.2.5 Project
7.2.6 Union
7.2.7 Distinct
7.2.8 GroupBy
7.2.9 Reduce
7.2.10 ReduceGroup
7.2.11 Aggregate
7.2.12 Join
7.2.13 OuterJoin
7.2.14 Cross
7.2.15 CoGroup
7.3 将参数传递给函数
7.4 广播变量
7.4.1 注册广播变量
7.4.2 访问广播变量
7.4.3 代码实现
7.5 物理分区
7.5.1 Rebalance
7.5.2 PartitionByHash
7.5.3 PartitionByRange
7.5.4 SortPartition
7.6 批处理的本地测试
7.6.1 本地执行环境
7.6.2 集合支持的数据源和数据接收器
第8章 Table API和SQL
8.1 基础概念和通用API
8.1.1 添加依赖
8.1.2 第一个Hello World表程序
8.1.3 表程序的公共结构
8.1.4 创建一个TableEnvironment
8.1.5 在目录中注册表
8.1.6 查询一个表
8.1.7 DataStream和DataSet API的集成
8.1.8 数据类型到表模式的映射
8.1.9 查询优化
8.2 SQL
8.2.1 指定一个查询
8.2.2 SQL支持的语法
8.2.3 SQL操作
8.2.4 数据类型
8.2.5 保留关键字
8.3 Table API
8.4 自定义函数
8.4.1 标量函数
8.4.2 表函数
8.4.3 聚合函数
8.4.4 自定义函数与运行环境集成
8.5 SQL客户端
8.5.1 启动SQL客户端
8.5.2 配置参数
8.5.3 分离的SQL查询
8.5.4 SQL客户端中的视图
8.5.5 SQL客户端中的时态表
第9章 流处理中的Table API和SQL
9.1 动态表
9.1.1 动态表和连续查询
9.1.2 在数据流中定义动态表
9.1.3 动态表到数据流的转换
9.2 时间属性
9.2.1 基本概念
9.2.2 组窗口
9.2.3 处理时间
9.2.4 事件时间
9.3 动态表的Join
9.3.1 常规Join
9.3.2 时间窗口Join
9.4 时态表
9.4.1 需求背景
9.4.2 时态表函数
9.5 查询配置
9.5.1 查询配置对象
9.5.2 空闲状态保留时间
9.6 连接外部系统
9.6.1 概述
9.6.2 表模式
9.6.3 更新模式
9.6.4 表格式
9.6.5 表连接器
9.6.6 未统一的TableSources和TableSinks
第10章 执行管理
10.1 执行参数
10.1.1 在ExecutionEnvironment中设置参数
10.1.2 在ExecutionConfig中设置参数
10.2 并行执行
10.2.1 操作符级别
10.2.2 执行环境级别
10.2.3 客户端级别
10.2.4 系统级别
10.2.5 设置最大并行度
10.3 重启策略
10.3.1 固定延迟重启策略
10.3.2 故障率重启策略
10.3.3 没有重新启动策略
10.3.4 回退重启策略
10.4 程序打包和部署
10.4.1 打包Flink程序
10.4.2 Web UI(Web管控台)提交
10.4.3 命令行客户端提交
10.5 命令行接口
10.5.1 将Flink程序提交到Flink集群
10.5.2 列出集群中的作业
10.5.3 调整集群中的作业
10.5.4 保存点操作命令
10.6 执行计划
10.6.1 在线可视化工具
10.6.2 Web管控台可视化

短评

书不错书不错书不错书不错

2020-12-11 23:57:49

不错,不仅可以快速入门,还可最为参考手册,挺方便的。

2020-12-12 10:35:53

说什么核心原理,还是1.7.2的版本,就一个低级的抄写的作品。没什么技术含量,完全骗人的

2020-12-18 22:30:05

有很多干货,值得一读

2020-12-11 09:30:44

记得记得记得叫上赛季今生今世继续继续积极只能说你呢岁岁年年少男少女说

2020-12-10 20:14:29

最新出的一本flink书,介绍了table sql

2020-12-08 10:31:59

标签
Flink
产品特色