科技>计算机>编程语言
剑指大数据——Flink学习精要(Scala版)  

剑指大数据——Flink学习精要(Scala版)  "

作者:尚硅谷教育
ISBN:9787121443428
定价:¥105.0
字数:628千字
页数:312
出版时间:2022-10
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

本书基于流行稳定版Flink 1.13进行讲解,从Flink数据处理思想开始讲起,带领读者深入理解Flink的基本架构,进而由浅入深结合具体案例进行讲解,详细剖析了Flink中DataStream API的使用,并对Flink中的时间语义、状态、容错机制等重要概念进行了详尽的阐释。同时,本书还对实际开发过程中常用的Flink SQL、CEP等高层级API进行了细致讲解,以电商网站中的实际应用为场景,提供了大量的代码实现。本书分为12章:第1~5章,带领读者初步认识Flink并编写基本的Flink程序;第6~10章,深入探讨了Flink内部的高级应用。第11~12章,讲解了Flink提供的扩展功能。本书适用于大数据的学习者与从业人员,以及院校大数据相关专业的学生,也是大数据学习的必备书籍。

前言

对于一家互联网公司来说,什么是最核心的资产呢?是产品、用户、运营,还是技术? 其实,在如今日臻成熟的互联网环境下,这些都已不再是最核心的竞争力了。以我们最熟悉的电商为例,平台产品的设计、网站搭建、技术选型、运营手段都已经有了一整套成熟的方案。我们甚至可以在GitHub上下载一套代码,就可以搭建起自己的电商网站。那么,对于一个电商企业,核心竞争力在哪里呢? 难道只有砸钱搞特价营销这一个大招了吗? 当然不是。其实,比用户更重要的资产是数据。 用户可能会快速流动,所有用户在网站上的行为都可以作为数据记录下来,收集起来进行统计分析。以往很多用户行为数据是不被重视的,而现在越来越多的公司发现,数据是一个巨大的宝藏。数据会“说话”,它可以告诉我们平台的状态、用户的组成、用户的习惯和喜好,把更深层的信息展现在我们面前,让公司的策略更加合理。 如今数据的价值被不断地发掘,大数据分析已经成为互联网公司的标配,而且很多公司已经不仅仅用来做平台统计,更是作为了精准营销、个性化服务的切入点。 大数据处理一般分为离线处理和实时处理两种方式,处理引擎在架构上会有本质的不同。如今大数据技术的应用场景对实时性的要求已经越来越高,而Flink作为新一代开源大数据流处理引擎,有着良好的实时性和容错性,在近些年引起了业内极大的兴趣和关注。由于在实时分析领域的优势,越来越多的公司开始将大数据实时项目向Flink迁移,其社区也在快速发展壮大。随着阿里内部版本Blink开源,且并入Flink 1.9版本,Flink对于离线批处理的支持也更加全面和强大,一跃成为如今最火爆的大数据处理框架。对于大数据处理,Flink毫无疑问是一门必修课。 在国内一众“大厂”的引领下,Flink的发展日新月异,每一个版本都会引入更多的新特性、甚至对底层架构进行了重大调整,截至本书成稿时,已经发布了1.13版本。遗憾的是,Flink官网资料主要是英文版,尽管内容翔实却显得庞杂无从下手,中文资料更是匮乏,已有的文章和书籍也大多是基于早期版本,无法跟上Flink的更新速度。我们希望通过本书的编写,弥补这一空白。 Flink官方提供了Java和Scala两种语言的完整API,本书选择了更加简洁的Scala语言进行代码实现,Flink版本选用目前使用比较广泛的Flink 1.13。 本书核心内容 全书共分12章,具体内容如下: ? 第1章:Flink简介,介绍了Flink的源起、设计理念、应用和重要特性。 ? 第2~4章:Flink开发应用的初步介绍。第2章以一个经典的词频统计(Word Count)需求为例,初次编写Flink代码,介绍Flink程序的基本结构。第3章介绍Flink在实际生产环境中的运用,涉及集群部署和作业提交。第4章进行总结梳理,详细讲解Flink的运行时架构和作业提交流程,对其中的一些重要概念做了详尽阐释。 ? 第5章:主要介绍基本DataStream API的用法。详细讲解用来构建完整Flink程序的常用算子,包括源算子、转换算子和输出算子,其中涉及大量API的调用,均配有代码的实现。 ? 第6~8章:第5章的进一步深入和拓展,主要介绍DataStream API的高级用法。其中,第6章是Flink流处理中的特色内容,引入时间语义和水位线的概念,并详细介绍了Flink中强大而灵活的窗口操作,这些是Flink能够正确处理乱序数据的基础。第7章介绍处理函数,这是Flink的底层API,可以对复杂需求自定义处理逻辑。第8章介绍多流转换操作,主要涉及分流和合流,在很多实际项目中有着广泛应用。 ? 第9章:介绍状态编程,这是Flink中非常重要的内容,详细介绍Flink中状态管理机制和托管状态的具体用法,给出大量的代码实现,并引出检查点和状态后端的概念。 ? 第10章:在第9章的基础上,深入讲解Flink的容错机制,包括检查点的原理和算法、状态一致性的概念,以及Flink如何保证端到端的精确一次一致性。 ? 第11~12章:分别介绍Flink SQL和CEP。这是更高层级的API,调用更加方便,在实际项目中应用非常广泛。 读者可以关注“尚硅谷教育”公众号(微信号:atguigu),在聊天窗口发送关键字“Flink_Scala”,免费获取本书配套视频教程。 阅读本书需要熟悉Scala语言,第11章的学习还需要熟悉SQL查询语言,如果不具备相关的基础知识,可以在“尚硅谷教育”公众号聊天窗口发送关键字“大数据”,免费获取尚硅谷大数据全套视频教程及学习路线图,内有大数据核心基础Scala、Linux等众多技术视频和配套教辅资料。 感谢电子工业出版社的李冰编辑,是您的精心指导让本书得以付梓面世。也感谢所有为本书内容编写提供技术支持的老师们所付出的努力。 关于我们 尚硅谷是一家专业的IT教育培训机构,现拥有北京、深圳、上海、武汉、西安五处分校,开设有JavaEE、大数据、HTML5前端、UI/UE设计等多门学科,累计发布的视频教程3000多小时,广受赞誉。通过面授课程、视频分享、在线学习、直播课堂、图书出版等多种方式,满足了全国编程爱好者对多样化学习场景的需求。 尚硅谷一直坚持“技术为王,课比天大”的发展理念,设有独立的研究院,与多家互联网大厂的研发团队保持技术交流,保障教学内容始终基于研发一线,坚持聘用名校名企的技术专家,从源码层面进行技术讲解。 希望通过我们的努力,帮助到更多需要帮助的人,让天下没有难学的技术,为中国的软件人才培养尽一点绵薄之力。 尚硅谷教育 ?

目录

第1章 初识Flink 1 1.1 Flink的起源和设计理念 1 1.2 Flink的应用 3 1.2.1 Flink在企业中的应用 3 1.2.2 Flink主要的应用场景 3 1.3 流式数据处理的发展和演变 4 1.3.1 流处理和批处理 5 1.3.2 传统事务处理 6 1.3.3 有状态的流处理 6 1.3.4 Lambda架构 9 1.3.5 新一代流处理器 10 1.4 Flink的特性总结 10 1.4.1 Flink的核心特性 10 1.4.2 分层API 10 1.5 Flink与Spark 11 1.5.1 数据处理架构 12 1.5.2 数据模型和运行架构 13 1.5.3 Spark还是Flink 13 1.6 本章总结 14 第2章 Flink快速上手 15 2.1 环境准备 15 2.2 创建项目 15 2.3 编写代码 18 2.3.1 批处理 18 2.3.2 流处理 19 2.4 本章总结 22 第3章 Flink部署 23 3.1 快速启动一个Flink集群 24 3.1.1 环境配置 24 3.1.2 本地启动 24 3.1.3 集群启动 25 3.1.4 向集群提交作业 27 3.2 部署模式 30 3.2.1 会话模式 30 3.2.2 单作业模式 31 3.2.3 应用模式 31 3.3 独立模式 32 3.3.1 会话模式部署 32 3.3.2 单作业模式部署 32 3.3.3 应用模式部署 32 3.3.4 高可用 33 3.4 YARN模式 34 3.4.1 相关准备和配置 34 3.4.2 会话模式部署 35 3.4.3 单作业模式部署 36 3.4.4 应用模式部署 37 3.4.5 高可用 37 3.5 K8s模式 38 3.6 本章总结 38 第4章 Flink运行时架构 39 4.1 系统架构 39 4.1.1 整体构成 40 4.1.2 JobManager 40 4.1.3 TaskManager 41 4.2 作业提交流程 42 4.2.1 高层级抽象视角 42 4.2.2 独立模式 42 4.2.3 YARN集群 43 4.3 一些重要概念 45 4.3.1 数据流图 45 4.3.2 并行度 46 4.3.3 算子链 48 4.3.4 作业图与执行图 49 4.3.5 任务和任务槽 51 4.4 本章总结 56 第5章 DataStream API基础篇 57 5.1 执行环境 57 5.1.1 创建执行环境 58 5.1.2 执行模式 58 5.1.3 触发程序执行 60 5.2 数据源 60 5.2.1 准备工作 60 5.2.2 从集合中读取数据 61 5.2.3 从文件读取数据 61 5.2.4 从Socket读取数据 62 5.2.5 从Kafka读取数据 62 5.2.6 自定义数据源 64 5.2.7 Flink支持的数据类型 66 5.3 转换操作 67 5.3.1 基本转换算子 67 5.3.2 聚合算子 71 5.3.3 用户自定义函数 75 5.3.4 物理分区 78 5.4 输出 83 5.4.1 连接到外部系统 83 5.4.2 输出到文件 85 5.4.3 输出到Kafka 86 5.4.4 输出到Redis 87 5.4.5 输出到Elasticsearch 89 5.4.6 输出到MySQL 91 5.4.7 自定义Sink输出 93 5.5 本章总结 94 第6章 Flink中的时间和窗口 95 6.1 时间语义 95 6.1.1 Flink中的时间语义 95 6.1.2 哪种时间语义更重要 97 6.2 水位线 98 6.2.1 事件时间和窗口 98 6.2.2 什么是水位线 100 6.2.3 如何生成水位线 104 6.2.4 水位线的传递 110 6.2.5 水位线的总结 111 6.3 窗口 112 6.3.1 窗口的概念 112 6.3.2 窗口的分类 114 6.3.3 窗口API概览 117 6.3.4 窗口分配器 118 6.3.5 窗口函数 121 6.3.6 测试水位线和窗口的使用 129 6.3.7 其他API 131 6.3.8 窗口的生命周期 135 6.4 迟到数据的处理 136 6.4.1 设置水位线延迟时间 136 6.4.2 允许窗口处理迟到数据 137 6.4.3 将迟到数据放入窗口侧输出流 137 6.5 本章总结 140 第7章 处理函数 141 7.1 基本处理函数 141 7.1.1 处理函数的功能和使用 141 7.1.2 ProcessFunction解析 143 7.1.3 处理函数的分类 144 7.2 按键分区处理函数 145 7.2.1 定时器和定时服务 145 7.2.2 KeyedProcessFunction的使用 146 7.3 窗口处理函数 149 7.3.1 窗口处理函数的使用 149 7.3.2 ProcessWindowFunction解析 150 7.4 应用案例——Top N 151 7.4.1 使用ProcessAllWindowFunction 151 7.4.2 使用KeyedProcessFunction 153 7.5 侧输出流 157 7.6 本章总结 157 第8章 多流转换 158 8.1 分流 158 8.1.1 简单实现 158 8.1.2 使用侧输出流 159 8.2 基本合流操作 161 8.2.1 联合 161 8.2.2 连接 164 8.3 基于时间的合流——联结 169 8.3.1 窗口联结 169 8.3.2 间隔联结 172 8.3.3 窗口同组联结 175 8.4 本章总结 176 第9章 状态编程 177 9.1 Flink中的状态 177 9.1.1 有状态算子 177 9.1.2 状态的管理 178 9.1.3 状态的分类 178 9.2 按键分区状态 180 9.2.1 基本概念和特点 180 9.2.2 支持的结构类型 180 9.2.3 代码实现 182 9.2.4 状态生存时间 189 9.3 算子状态 190 9.3.1 基本概念和特点 190 9.3.2 状态类型 190 9.3.3 代码实现 191 9.4 广播状态 194 9.4.1 基本用法 194 9.4.2 代码实例 196 9.5 状态持久化和状态后端 197 9.5.1 检查点 197 9.5.2 状态后端 198 9.6 本章总结 200 第10章 容错机制 201 10.1 检查点 201 10.1.1 检查点的保存 202 10.1.2 从检查点恢复状态 204 10.1.3 检查点算法 206 10.1.4 检查点配置 210 10.1.5 保存点 212 10.2 状态一致性 213 10.2.1 一致性的概念和级别 214 10.2.2 端到端的状态一致性 214 10.3 端到端精确一次 215 10.3.1 输入端保证 215 10.3.2 输出端保证 215 10.3.3 Flink和Kafka连接时的精确一次保证 218 10.4 本章总结 221 第11章 Table API和SQL 222 11.1 快速上手 222 11.1.1 需要引入的依赖 223 11.1.2 一个简单示例 223 11.2 基本API 224 11.2.1 程序架构 225 11.2.2 创建表环境 225 11.2.3 创建表 226 11.2.4 表的查询 227 11.2.5 输出表 229 11.2.6 表和流的转换 230 11.3 流处理中的表 234 11.3.1 动态表和持续查询 235 11.3.2 将流转换成动态表 236 11.3.3 用SQL持续查询 237 11.3.4 将动态表转换为流 241 11.4 时间属性和窗口 242 11.4.1 事件时间 242 11.4.2 处理时间 244 11.4.3 窗口 245 11.5 聚合查询 247 11.5.1 分组聚合 247 11.5.2 窗口聚合 248 11.5.3 开窗聚合 250 11.5.4 应用实例——Top N 252 11.6 联结查询 255 11.6.1 常规联结查询 256 11.6.2 间隔联结查询 257 11.7 函数 257 11.7.1 系统函数 258 11.7.2 自定义函数 259 11.8 SQL客户端 265 11.9 连接到外部系统 267 11.9.1 Kafka 267 11.9.2 文件系统 269 11.9.3 JDBC 270 11.9.4 Elasticsearch 271 11.9.5 HBase 271 11.9.6 Hive 272 11.10 本章总结 275 第12章 Flink CEP 277 12.1 基本概念 277 12.1.1 CEP是什么 277 12.1.2 模式 278 12.1.3 应用场景 279 12.2 快速上手 279 12.2.1 需要引入的依赖 279 12.2.2 一个简单实例 279 12.3 模式API 281 12.3.1 个体模式 281 12.3.2 组合模式 285 12.3.3 模式组 288 12.3.4 匹配后跳过策略 289 12.4 模式的检测处理 290 12.4.1 将模式应用到流上 290 12.4.2 处理匹配事件 290 12.4.3 处理超时事件 293 12.4.4 处理迟到数据 296 12.5 CEP的状态机实现 297 12.6 本章总结 299

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个