![]()
内容推荐 本书从Apache Flink的缘起开始,由浅入深,理论结合实践,全方位地介绍Apache Flink这一处理海量数据集的高性能工具。本书围绕部署、流处理、批处理、Table API和SQL四大模块进行讲解,并详细说明Apache Flink的每个特性的实际业务背景,使读者不仅能编写可运行的Apache Flink程序代码,还能深刻理解并正确地将其运用到合适的生产业务环境中。 虽然本书是以Apache Flink技术框架来讲解流计算技术的,但是流计算领域开发所面临的各种问题同样是Java后端开发者在进行服务端开发时所要面临的,如有状态计算、Exactly Once语义等。因此,Apache Flink框架为解决这些问题而设计的方案同样值得Java后端开发者借鉴。 本书适合初级和中级软件工程师阅读,未接触过流计算领域的Java开发者也可以从本书中获益。针对初学者,本书提供Windows环境搭建的演示,使不具备Linux系统操作经验的读者也可以快速学习Apache Flink。 作者简介 刘洋,国家认证软件设计师,获得Apache Kylin管理员认证。 现任某上市咨询公司高级咨询顾问,有多年大数据、流式计算方面的开发经验,对Hadoop、Strom、Flink等大数据计算引擎有着非常深入的理解,积累了丰富的项目实践经验。先后利用相关技术为银行、保险、能源等领域的头部企业解决业务痛点。 个人技术博客:www.cnblogs.com/intsmaze 个人Github项目:github.com/intsmaze 目录 第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 |