首页>参考读物>计算机科学与技术>综合

Flink SQL与DataStream:入门、进阶与实战
作者 : 羊艺超 著
丛书名 : 大数据技术丛书
出版日期 : 2023-11-23
ISBN : 978-7-111-73902-9
定价 : 129.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 :
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

内容简介
这是一本从使用和定制开发双重视角,循序渐进地讲解Flink的分布式系统架构设计、流计算API设计、时间处理、状态管理等核心技术的原理和实现的著作。
它面向Flink的初学者,内容沿着基础知识、实际问题和解决方案这条主线展开,不仅层层剖析了Flink学习中的重点和难点,而且还通过大量案例展示了如何快速获得工程化实践能力。
全书共11章,主要内容如下:
(1)Flink基础知识(第1、2章)
主要介绍了Flink的定位、核心特性、API分类,演示了如何搭建Flink作业的基础环境、如何创建一个Flink项目以及如何开发入门应用程序WordCount,并结合该应用程序说明了常见Flink作业的骨架结构。
(2)Flink分布式架构及核心概念(第3章)
主要内容包括Flink作业的运行时架构、部署模式、资源提供框架,以及开发 Flink作业时涉及的核心概念,对于后续学习Flink DataStream API和Flink SQL API很有帮助。
(3)Flink DataStream API(第4~6章)
讲解了Flink DataStream API的核心知识,包括执行环境、数据源、数据简单转换、数据分组与聚合、数据汇等,并讲解了Flink DataStream API中的时间语义、时间窗口、有状态计算和检查点这四大“王*牌武器”的由来与实现原理。
(4)Flink有状态流处理API(第7章)
Flink DataStream API不能优雅地解决窗口使用不灵活和分流成本高这两个问题,于是Flink提供了有状态流处理API。本章主要讲解了Flink有状态流处理API解决上述两个问题的方法。
(5)Flink Table API与SQL API(第8~11章)
Flink Table API和Flink SQL API的底层原理相同,可以相互转换,但Flink SQL API更为简单和常用。这4章分别介绍了Flink Table API、Flink SQL API 的功能,以及使用SQL实现流处理的核心技术,结合大量代码示例着重介绍了Flink SQL API的语法、函数、参数配置及性能优化方法。

图书特色

某头部短视频平台资深大数据工程师撰写,Apache Flink Committer/Contributor强烈推荐
从使用和定制开发双重视角,循序渐进地讲解Flink的分布式系统架构设计、流计算API设计、时间处理、状态管理等核心技术的原理和实现
用大量案例和图表详解用Java和Flink SQL开发Flink流处理作业的方法与过程,让你获得工程化实践能力

上架指导

计算机/大数据

封底文字

我和本书作者结缘于Flink社群,几年下来,我能感受到他对Flink的热情和钻研精神。本书基于他本人学习和实践Flink的经验,从使用和定制开发Flink的软件研发人员的视角出发,依次介绍了Flink的分布式系统架构设计、流式计算API设计,以及包括时间处理、状态管理在内的Flink核心技术的原理与实践,无论对于探究Flink内部原理,还是对于在生产上使用和定制开发Flink,本书都非常有价值。
——陈梓立 Apache Flink Committer

流处理是未来大数据发展的必然趋势,本书作者有多年研发经验,对流处理系统有着独特的见解。在本书中,作者对Flink中的时间语义、时间窗口、有状态计算和检查点这四大“王牌武器”的设计思路进行了详细剖析,能够帮助读者更好地认识并掌握Flink。
——王天宜 SelectDB资深解决方案架构师

在过去的十年中,流处理技术的应用复兴了,渗透到了多个行业。本书作者基于自身丰富的研发经验,用浅显易懂的语言详细阐述了Flink中各种流式概念的设计思想,能让读者更好地了解并使用Flink,进而让流式计算更好地服务业务,创造价值。
——张家锋 Apache Doris PMC

实时计算已经成为大数据领域的重要组成部分,同时作为实时计算领域的事实标杆,Apache Flink也愈发完善和成熟。然而,对于许多用户来说,学习Flink仍然存在一定的门槛,比如Flink的SQL语法与Hive/Spark的离线语法差异很大,而且目前详细介绍Flink SQL的图书还比较少。本书对Flink的基本原理、核心概念等进行了深入浅出的讲解,无论你是一名数据工程师、开发人员还是数据科学家,相信本书都将成为你掌握Flink实时计算技术的绝佳指南。
——张芒 Apache Flink Contributor

作者简介

羊艺超 著:羊艺超
资深大数据开发工程师,现就职于某头部短视频公司。拥有多年流式计算开发、优化、保障和治理经验,以及从0到1使用Flink SQL建设实时数仓的经验。对Flink大数据计算引擎有着深入的理解,在Flink的场景化应用方面有丰富的经验,能够使用Flink等技术组件解决千万级别QPS的实时数据场景下的痛点问题。开源了自己的 Flink 学习项目 https://github.com/yangyichao-mango/flink-study。对Redis、Kafka、ClickHouse等实时数仓构建过程中依赖的引擎都较为熟悉。
个人微信公众号:大数据羊说。发表了数十篇实时数仓建设的原创文章,深受读者喜爱。

图书目录

《Flink SQL与DataStream:入门、实战与进阶》

?前言
o为何写作本书
o本书主要内容
o本书读者对象
o本书内容特色
o资源和勘误
o致谢
?第 1 章 初识 Flink
o1.1 Flink 诞生的背景
o1.2 Flink 应用场景及在大数据中的地位
o1.3 Flink 重要特性
?1.3.1 真正的流式处理引擎
?1.3.2 强大性能的分布式处理引擎
?1.3.3 高可用的有状态处理引擎
?1.3.4 时间语义丰富的处理引擎
?1.3.5 流批一体的处理引擎
o1.4 Flink 架构体系
?1.4.1 面向用户 API
?1.4.2 运行时架构
?1.4.3 Flink 架构中专有名词
o1.5 常常与 Flink 搭配使用的大数据组件
?1.5.1 实时与离线生态对比
?1.5.2 数据存储:Kafka\Pulsar
?1.5.3 数据服务:MySQL\Clickhouse
?1.5.4 数据存储:Redis
?第 2 章 开发一个 Flink 任务
o2.1 JDK 环境准备
o2.2 Maven 环境准备
o2.3 编写 ETL 代码
o2.4 本地环境运行 Flink 任务
?第 3 章 Flink DataStream
o3.1 常见实时处理任务的输入到输出
o3.2 数据源
o3.3. 数据转换
?3.3.1 单流处理:Map\FlatMap\Filter
?3.3.2 多流合并处理:Union\Connect\CoMap\CoFlapMap
?3.3.3 侧输出流
o3.4 数据 Shuffle
?3.4.1 hash\global\rebalance\forward 策略区别及应用场景
?3.4.2 算子 chain
o3.5 数据普通聚合
o3.6 计数窗口聚合
o3.7 时间窗口聚合
o3.8 时间语义和 Watermark
?3.8.1 3 种不同类型的时间语义
?3.8.2 watermark 的诞生
?3.8.2 Watermark 生成器分类
?3.8.3 Flink 任务内 Watermark 传输策略
?3.8.4 实际案例
o3.9 数据广播
o3.10. 数据汇
o3.11 实战案例
?3.12.1 DAU 去重场景实战
?3.12.2 动态化流量拆分平台实践
?第 4 章 Flink 状态原理及异常容错机制
o4.1 状态、有状态任务
o4.2 为什么需要管理状态
o4.3 Flink 中的状态全景图(题目待定)
o4.4 Flink 状态接口
?4.4.1 KeyedState
?4.4.2 OperatorState
o4.5 Flink 状态后端
o4.6 Flink 状态管理:Checkpoint\Savepoint
o4.7 Flink 状态实战及应用场景
?4.7.1 并发改变时,State 的重分配策略
?4.7.2 端到端的精确一次语义保障
?4.7.3 Chandy-Lambort 算法
?4.7.4 并发度 & 最大并发度的设置策略
?4.7.5 常用 State 类型及应用场景
?第 4 章 Flink SQL 核心概念
o4.1 SQL 简介及运行环境
o4.2 SQL 的基本概念及常用 API
?4.2.1 一个 SQL\Table API 任务的代码结构
?4.2.2 SQL 上下文:TableEnvironment
?4.2.3 SQL 表概念
?4.2.4 SQL 临时表、永久表
?4.2.5 SQL 外部表、视图 VIEW
?4.2.6 一个 SQL 查询案例
?4.2.7 TableEnvironment 常用 API
?4.2.8 SQL 与 DataStream API 的转换
o4.3 SQL 数据类型
?4.3.1 支持的数据类型分类
?4.3.2 SQL 数据类型系统设计
o4.4 SQL 应用到流处理核心思路解读
?4.4.1 流批处理的异同点
?4.4.2 将 SQL 应用于流处理核心解决的问题
o4.5 SQL 动态表 & 连续查询
?4.5.1 SQL 流处理的输入:输入流映射为 SQL 动态输入表
?4.5.2 SQL 流处理的计算:实时处理底层技术 - SQL 连续查询
?4.5.3 SQL 流处理实际应用:动态表 & 连续查询技术的两个实战案例
?4.5.4 SQL 连续查询的两种类型:更新(Update)查询 & 追加(Append)查询
?4.5.5 SQL 流处理的输出:动态输出表转化为输出数据
o4.6 SQL 时间属性
?4.6.1 事件时间、处理时间
?4.6.2 时区问题
o4.7 一条 SQL 到一个 Flink 任务的转化过程
?4.7.1 从我们熟悉的 DataStream API 出发尽情想象
?4.7.2 借助 Apache Calcite 的能力
?4.7.3 Apache Calcite 处理流程
?4.7.4 SQL 生成代码
?第 5 章 Flink SQL 语法
o5.1 WITH...AS 语法糖
o5.2 SELECT & WHERE:ETL、字段标准化
o5.3 窗口聚合
?5.3.1 滚动窗口(常用)
?5.3.2 渐进式窗口(常用)
?5.3.3 滑动窗口
?5.3.4 Session 窗口
?5.3.5 Window TVF
?5.3.6 GROUPING SETS:自定义维度组合
o5.4 Group 聚合
o5.5 流 Join
?5.5.1 Regular Join:常规 Join
?5.5.2 Interval Join:时间区间 Join
?5.5.3 Temporal Join:快照 Join
o5.6 维表 Join
?5.6.1 Lookup Join:维表 Join(优化技巧)
?5.6.2 Array Expansion:列转行
?5.6.3 Table Function:表函数
o5.7 Deduplication 去重
o5.8 Over 聚合
o5.9 TopN 排行榜
o5.10 Window TopN:窗口内 TopN
o5.11 LIMIT\ORDER BY\集合操作
o5.12 DDL:Create\Alter
?第 6 章 Flink SQL 函数
o6.1 函数的分类
?6.1.1 系统(内置)函数、Catalog 函数
?6.1.2 临时函数、持久化函数
o6.2 函数的使用
?6.2.1 函数的引用方式
?6.2.2 函数的解析顺序
o6.3 系统内置函数
o6.4 自定义函数(UDF)
o6.5 开发 UDF 之前的需知事项
?6.5.1 继承 UDF 基类
?6.5.2 实现 UDF 执行逻辑函数
?6.5.3 注意 UDF 入参、出参类型推导
?6.5.4 明确 UDF 输出结果是否是定值
?6.5.5 巧妙运用运行时上下文
o6.6 标量函数(Scalar Function)
o6.7 表值函数(Table Function)
o6.8 聚合函数(Aggregate Function)
o6.9 表值聚合函数(Table Aggregate Function)
?第 7 章 SQL 能力扩展
o7.1 UDF 扩展 - Module
?7.1.1 CoreModule:默认内置 Module
?7.1.2 HiveModule:支持 Hive 内置 UDF
?7.1.3 用户自定义 Module
?7.1.4 应用案例:用户自定义 Module :Flink SQL 支持 Hive UDF
o7.2 元数据持久化扩展 - Catalog
?7.2.1 GenericMemoryCatalog:默认内存 Catalog
?7.2.2 HiveCatalog:使用 Hive Metastore 存储元数据
?7.2.3 JdbcCatalog
?7.2.4 用户自定义 Catalog
o7.3 任务参数配置
?7.3.1 运行时参数
?7.3.2 优化器参数
?7.3.3 表参数
o7.4 性能调优
?7.4.1 MiniBatch 聚合:微批聚合
?7.4.2 Filter 聚合:去重 Bitmap 复用
?7.4.3 Local-Global 聚合:两阶段聚合优化
?7.4.4 Split-Distinct 聚合:去重分桶避免数据倾斜
o7.5 用户自定义 Source\Sink:Connector 扩展
o7.6 用户自定义序列化方式:Format 扩展
o7.7 语法扩展 - Hive Dialect
o7.8 Flink SQL 语义理解技巧
?7.8.1 什么时候是 Unbounded 流,什么时候是 Append 流
?7.8.2 学会在本地环境 Debug 查看生成的代码
?第 8 章 Flink SQL 构建实时数仓
o8.1 电商实时数仓架构
o8.2 Flink SQL 语义理解技巧
o8.2 SQL 开发 Web IDE:Dlink & Apache Zepplin
o8.3 Retract 机制存在的缺点
?8.3.1 UDF 使用的坑
?8.3.2 存在多次回撤的问题
?3.13 常用 API 及编码标准(考虑不作为单独一章,而是穿插在各个章节中)
o3.13.1 常用 API 组合
o3.13.2 算子 uid 设置
o3.13.3 name 名称设置
o3.13.4 Java lambda 表达式类型信息问题(Java 序列化机制)
o3.13.5 类型信息问题
o3.13.6 Protobuf 序列化
o3.13.7 Enum State 序列化问题
o3.8.8 Keyby 结果需要保证数据传输前后的一致性
o3.8.9 善用 Aggregate 聚合而不是 Apply 聚合
?

教学资源推荐
作者: David E.Culler, Jaswinder Pal Singh, Anoop Gupta
作者: 周爱武 汪海威 肖云 编著
作者: 徐洁磐
参考读物推荐
作者: 安建龙 张新彦 等编著
作者: 王式安 樊正复
作者: (美)David Abrahams  Aleksey Gurtovoy 著