编辑推荐
一本书讲透Flink。
内容简介
一本从使用和定制开发双重视角,循序渐进地讲解Flink的分布式系统架构设计、流计算API设计、时间处理、状态管理等核心技术的原理和实现的著作。
本书面向Flink的初学者,内容沿着基础知识、实际问题和解决方案这条主线展开,不仅层层剖析了Flink学习中的重点和难点,而且还通过大量案例展示了如何快速获得工程化实践能力。
作者简介
作者羊艺超,资深大数据开发工程师,现就职于某头部短视频公司。拥有多年流式计算开发、优化、保障和治理经验,以及从0到1使用Flink SQL建设实时数仓的经验。对Flink大数据计算引擎有着深入的理解,在Flink的场景化应用方面有丰富的经验,能够使用Flink等技术组件解决千万级别QPS的实时数据场景下的痛点问题。
章节目录
版权信息
前言
第1章 初识Flink
1.1 Flink定位
1.1.1 Flink是什么
1.1.2 Flink对于数据的定义
1.1.3 Flink的3种应用场景
1.1.4 Flink的3个企业应用案例
1.2 Flink的核心特性
1.2.1 Flink的5个核心特性
1.2.2 3种流处理引擎特性的对比
1.3 Flink的API
1.3.1 Code API
1.3.2 关系型API
1.4 与Flink搭配使用的引擎
1.5 本章小结
第2章 Flink WordCount作业开发及运行
2.1 基础环境准备
2.2 创建一个Flink项目
2.3 Flink WordCount代码案例
2.4 Flink作业的骨架结构
2.5 本章小结
第3章 Flink分布式架构及核心概念
3.1 分布式应用与非分布式应用的异同
3.2 Flink作业的运行时架构
3.2.1 Flink作业提交部署流程
3.2.2 Client
3.2.3 JobManager
3.2.4 TaskManager
3.3 Flink作业的3种部署模式
3.3.1 Session模式
3.3.2 Per-Job模式
3.3.3 Application模式
3.4 Flink作业的2种资源提供框架
3.4.1 Standalone
3.4.2 YARN
3.5 开发Flink作业时涉及的核心概念
3.5.1 Function
3.5.2 Operator
3.5.3 算子并行度
3.5.4 Operator Chain
3.5.5 Task和SubTask
3.5.6 Task Slot和共享Task Slot
3.5.7 算子最大并行度
3.6 Flink Web UI
3.6.1 概览模块
3.6.2 Flink作业详情
3.7 本章小结
第4章 Flink DataStream API
4.1 什么是DataStream
4.2 执行环境
4.3 数据源
4.3.1 从数据源存储引擎中读取数据的API
4.3.2 从Socket中读取数据
4.3.3 从Kafka中读取数据
4.3.4 从自定义数据源中读取数据
4.4 数据简单转换
4.4.1 单流的3种数据简单转换
4.4.2 多流的4种数据简单转换
4.5 数据分组与聚合
4.5.1 KeyBy
4.5.2 Max、Min和Sum
4.5.3 Reduce
4.6 数据汇
4.6.1 向数据汇存储引擎写数据的API
4.6.2 向控制台输出数据
4.6.3 向Kafka写入数据
4.6.4 向自定义数据汇写入数据
4.7 算子间数据传输的8种策略
4.7.1 Forward
4.7.2 Rebalance
4.7.3 Shuffle
4.7.4 KeyGroup
4.7.5 Rescale
4.7.6 Broadcast
4.7.7 Global
4.7.8 Custom Partition
4.8 数据异步I/O处理
4.8.1 同步I/O处理导致作业低吞吐
4.8.2 同步I/O处理低吞吐的4种解决方案
4.8.3 异步I/O处理原理
4.8.4 异步I/O处理API
4.8.5 异步I/O处理API的注意事项
4.9 RichFunction
4.10 数据序列化
4.10.1 Flink数据序列化机制的诞生过程
4.10.2 Flink支持的7种数据类型
4.10.3 TypeInformation与TypeSerializer
4.10.4 Java Lambda表达式对数据序列化的影响
4.10.5 使用注意事项
4.11 工具类及Debug建议
4.11.1 ParameterTool
4.11.2 Debug建议
4.12 本章小结
第5章 Flink的时间语义和时间窗口
5.1 时间语义和时间窗口概述
5.2 时间窗口
5.2.1 Flink中的时间窗口
5.2.2 为什么需要时间窗口
5.2.3 时间窗口程序的骨架结构
5.2.4 时间窗口的计算机制
5.2.5 窗口分配器
5.2.6 窗口处理函数
5.2.7 窗口触发器
5.3 时间语义
5.3.1 处理时间
5.3.2 事件时间
5.3.3 摄入时间
5.4 Watermark
5.4.1 Watermark的诞生背景
5.4.2 Watermark的定义及特点
5.4.3 Watermark的传输策略
5.4.4 使用Watermark缓解数据乱序问题
5.4.5 生成Watermark的API
5.5 双流数据时间窗口关联
5.5.1 时间窗口关联
5.5.2 时间窗口CoGroup操作
5.5.3 时间区间关联
5.6 计数窗口
5.7 生产中的常见问题及解决方案
5.7.1 事件时间窗口不触发计算的3种原因及解决方案
5.7.2 事件时间窗口数据乱序问题的体系化解决方案
5.7.3 windowAll()方法导致数据倾斜问题的解决方案
5.7.4 扩展思考:Watermark是否只能从时间戳中取值
5.8 本章小结
第6章 Flink状态原理及异常容错机制
6.1 Flink有状态计算
6.1.1 状态及有状态计算的定义
6.1.2 Flink有状态计算的4类应用
6.1.3 传统有状态计算方案应用于大数据场景时存在的3个问题
6.1.4 Flink实现有状态计算的思路
6.1.5 Flink实现有状态计算面临的2个难题
6.1.6 Flink有状态计算总结
6.2 Flink状态接口
6.2.1 Flink状态的分类
6.2.2 算子状态
6.2.3 键值状态
6.2.4 广播状态
6.2.5 键值状态保留时长
6.2.6 Flink状态接口总结
6.3 Flink状态管理
6.3.1 单机应用的精确一次数据处理
6.3.2 分布式应用通用的精确一次数据处理
6.3.3 Flink Checkpoint
6.3.4 Flink Savepoint
6.3.5 端到端的精确一次数据处理
6.4 Flink状态后端
6.4.1 HashMap状态后端
6.4.2 RocksDB状态后端
6.4.3 状态后端的注意事项
6.5 Flink故障重启策略
6.6 本章小结
第7章 Flink有状态流处理API
7.1 ProcessFunction
7.1.1 促使ProcessFunction诞生的两个问题
7.1.2 ProcessFunction的定义
7.1.3 解决窗口使用起来不灵活和分流成本高的问题
7.2 5种不同应用场景下的处理函数
7.3 KeyedProcessFunction
7.4 本章小结
第8章 Flink Table API和SQL API
8.1 直接上手Table API和SQL API
8.1.1 运行环境依赖
8.1.2 Table API和SQL API案例
8.1.3 Table API和SQL API的关系
8.2 Table API和SQL API的核心API及功能
8.2.1 执行环境
8.2.2 表
8.3 使用SQL实现流处理的核心技术
8.3.1 使用SQL实现流处理的思路
8.3.2 动态表与连续查询
8.3.3 动态表与连续查询的执行案例
8.3.4 动态表映射为数据流
8.3.5 Table API和SQL API与DataStream API集成
8.4 本章小结
第9章 Flink SQL API语法
9.1 SQL数据类型
9.1.1 原子数据类型
9.1.2 复合数据类型
9.1.3 用户自定义数据类型
9.2 CREATE TABLE
9.3 WITH
9.4 SELECT和WHERE
9.5 SELECT DISTINCT
9.6 时间窗口聚合
9.6.1 窗口表值函数
9.6.2 分组窗口聚合函数
9.6.3 时间窗口聚合的时区问题
9.7 GROUP BY分组聚合
9.8 流关联
9.8.1 常规关联
9.8.2 时间窗口关联
9.8.3 时间区间关联
9.9 维表关联
9.9.1 表函数
9.9.2 数组扩展
9.9.3 查询关联
9.10 TopN排序
9.11 Deduplication去重
9.12 窗口TopN
9.13 Over聚合
9.14 其他操作
9.14.1 集合操作
9.14.2 元数据管理操作
9.15 EXPLAIN
9.16 SQL Hints
9.17 本章小结
第10章 Flink SQL API函数
10.1 函数的使用案例
10.2 函数的分类
10.2.1 系统内置函数
10.2.2 用户自定义函数
10.3 开发用户自定义函数
10.3.1 标量函数
10.3.2 表函数
10.3.3 聚合函数
10.3.4 异步表函数
10.4 本章小结
第11章 Flink SQL API参数配置及性能调优
11.1 参数配置
11.1.1 运行时参数
11.1.2 优化器参数
11.1.3 表参数
11.2 性能调优
11.2.1 微批处理的优化原理
11.2.2 去重场景BitMap复用的优化原理
11.2.3 两阶段聚合的优化原理
11.2.4 去重计算的分桶聚合的优化原理
11.3 本章小结
FlinkSQL与DataStream:入门、进阶与实战是2023年由机械工业出版社出版,作者羊艺超。
得书感谢您对《FlinkSQL与DataStream:入门、进阶与实战》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。