图书信息 - 《Flink实用教程_scala和python双语版》
《Flink实用教程_scala和python双语版》

《Flink实用教程_scala和python双语版》

出版社:小白学苑编写

页数:564 页

下载次数:84

积分消耗: 49.0 下载图书
内容简介

清华大学出版社出版,基于Flink 1.13.2,提供面向入门小白的Flink系统教程和案例。所有示例和案例代码均为Scala和Java双语实现。

本书包含配套资源:代码、数据、视频、课件PPT。

图书目录

  • 第1章 Flink架构与集群安装 9
    • 1.1 Flink简介 9
    • 1.1.1 Flink发展历程 9
    • 1.1.2 Flink特性 10
    • 1.2 Flink应用场景 11
    • 1.2.1 事件驱动应用程序 11
    • 1.2.2 数据分析应用程序 12
    • 1.2.3 数据管道应用程序 13
    • 1.3 Flink体系架构 13
    • 1.3.1 Flink系统架构 14
    • 1.3.2 Flink运行时架构 14
    • 1.3.3 Flink资源管理 16
    • 1.3.4 Flink作业调度 21
    • 1.3.5 Flink故障恢复 25
    • 1.3.6 Flink程序执行模式 26
    • 1.4 Flink集群安装 29
    • 1.4.1 Flink独立集群安装和测试 29
    • 1.4.2 Flink完全分布式集群安装 35
    • 1.4.3 Flink常用命令 41
  • 第2章 Flink开发环境准备 43
    • 2.1 安装和配置Maven 43
    • 2.1.1 安装和配置Maven 43
    • 2.1.2 修改Maven本地仓库默认位置 45
    • 2.1.3 创建初始模板项目 47
    • 2.1.4 构建打包项目 48
    • 2.2 使用IntelliJ IDEA+Maven开发Flink项目 49
    • 2.2.1 在IntelliJ IDEA中创建Flink项目 49
    • 2.2.2 设置项目基本依赖 54
    • 2.2.3 用于构建具有依赖项的Jar的模板 55
    • 2.2.4 编写批处理代码并测试执行 56
    • 2.2.5 项目打包并提交Flink集群执行 58
    • 2.3 Flink相关概念 60
    • 2.3.1 Flink数据流 60
    • 2.3.2 Flink分层API 61
  • 第3章 开发Flink实时数据处理程序 63
    • 3.1 Flink流处理程序编程模型 63
    • 3.1.1 流数据类型 63
    • 3.1.2 流应用程序实现 66
    • 3.1.3 流应用程序剖析 69
    • 3.2 Flink支持的数据源 74
    • 3.2.1 基于Socket的数据源 74
    • 3.2.2 基于文件的数据源 77
    • 3.2.3 基于集合的数据源 80
    • 3.2.4 自定义数据源 82
    • 3.3 Flink数据转换 97
    • 3.3.1 map转换 97
    • 3.3.2 flatMap转换 99
    • 3.3.3 filter转换 101
    • 3.3.4 keyBy转换 103
    • 3.3.5 reduce转换 109
    • 3.3.6 聚合转换 110
    • 3.3.7 union转换 112
    • 3.3.8 connect转换 114
    • 3.3.9 coMap, coFlatMap转换 119
    • 3.3.10 iterate转换 122
    • 3.3.11 project转换 125
    • 3.4 Flink流数据分区 126
    • 3.4.1 流数据分发模式 126
    • 3.4.2 数据分区方法 127
    • 3.4.3 数据分区示例 142
    • 3.4.4 理解操作符链 152
    • 3.5 Flink数据接收器 153
    • 3.5.1 内置数据接收器 153
    • 3.5.2 使用流文件连接器 156
    • 3.5.3 自定义数据接收器 163
    • 3.6 时间和水印概念 168
    • 3.6.1 时间概念 168
    • 3.6.2 事件时间和水印 170
    • 3.6.3 水印策略 172
    • 3.6.4 处理空闲数据源 176
    • 3.6.5 编写水印生成器 176
    • 3.6.6 内置水印生成器 182
    • 3.6.7 分配时间戳和水印示例 183
    • 3.7 窗口操作 191
    • 3.7.1 理解Flink窗口概念 191
    • 3.7.2 窗口分配器 194
    • 3.7.3 窗口函数 208
    • 3.7.4 触发器 232
    • 3.7.5 清除器 234
    • 3.7.6 处理迟到数据 234
    • 3.7.7 处理窗口结果 236
    • 3.7.8 窗口连接 237
    • 3.8 低级操作 242
    • 3.8.1 ProcessFunction 243
    • 3.8.2 KeyedProcessFunction示例 244
    • 3.8.3 案例:服务器故障检测报警程序 252
    • 3.9 状态和容错 257
    • 3.9.1 状态运算 257
    • 3.9.2 状态的类型 259
    • 3.9.3 使用托管的Keyed State 263
    • 3.9.4 使用托管Operator State 272
    • 3.9.5 广播状态 277
    • 3.9.6 状态后端 281
    • 3.9.7 检查点机制 284
    • 3.9.8 状态快照 289
    • 3.10 侧输出流 292
    • 3.10.1 什么是侧输出流 292
    • 3.10.2 侧输出流应用示例 294
    • 3.11 Flink流连接器 299
    • 3.11.1 Kafka连接器 299
    • 3.11.2 JDBC连接器 316
    • 3.12 其他 320
    • 3.12.1 在应用程序中使用日志 320
    • 3.12.2 使用ParameterTool 320
    • 3.12.3 命名大型TupleX类型 321
    • 3.13 Flink流处理案例 322
    • 3.13.1 处理IOT事件流 322
    • 3.13.2 运输公司车辆超速实时监测 329
  • 第4章 开发Flink批数据处理程序 342
    • 4.1 Flink批处理程序编程模型 342
    • 4.1.1 批应用程序实现 342
    • 4.1.2 批应用程序剖析 343
    • 4.2 数据源 346
    • 4.2.1 基于文件的数据源 346
    • 4.2.2 基于集合的数据源 353
    • 4.2.3 通用的数据源 355
    • 4.2.4 压缩文件 355
    • 4.3 数据转换 355
    • 4.3.1 map转换 356
    • 4.3.2 flatMap转换 356
    • 4.3.3 mapPartition转换 358
    • 4.3.4 filter转换 359
    • 4.3.5 reduce转换 360
    • 4.3.6 在分组数据集上的reduce转换 361
    • 4.3.7 在分组数据集上的GroupReduce转换 363
    • 4.3.8 在分组数据集上的GroupCombine转换 365
    • 4.3.9 在分组元组数据集上执行聚合 367
    • 4.3.10 在分组元组数据集上执行minBy转换 369
    • 4.3.11 在分组元组数据集上执行maxBy转换 370
    • 4.3.12 在全部元组数据集上执行聚合操作 371
    • 4.3.13 distinct转换 373
    • 4.3.14 join连接转换 374
    • 4.3.15 union转换 375
    • 4.3.16 project转换 377
    • 4.3.17 first-n转换 378
    • 4.4 数据接收器 379
    • 4.4.1 计算结果保存到文本文件 379
    • 4.4.2 计算结果保存到JDBC 381
    • 4.4.3 标准DataSink方法 383
    • 4.4.4 本地排序输出 384
    • 4.5 广播变量 385
    • 4.6 分布式缓存 387
    • 4.7 参数传递 391
    • 4.7.1 通过构造函数传参 391
    • 4.7.2 通过withParameters(Configuration)传参 392
    • 4.7.3 通过ExecutionConfig传递全局参数 394
    • 4.8 数据集中的拉链操作 396
    • 4.8.1 密集索引 396
    • 4.8.2 唯一索引 398
    • 4.9 Flink批处理示例 399
    • 4.9.1 分析豆瓣热门电影数据集_Scala实现 400
    • 4.9.2 分析豆瓣热门电影数据集_Java实现 405
  • 第5章 使用Table API进行数据处理 412
    • 5.1依赖 412
    • 5.2 Table API & SQL编程模式 413
    • 5.2.1 TableEnvironment 413
    • 5.2.2 Table API & SQL程序的结构 415
    • 5.2.3 在Catalog中创建表 416
    • 5.2.4 查询表 419
    • 5.2.5 向下游发送表 423
    • 5.2.6 翻译并执行查询 424
    • 5.3 Table API 429
    • 5.3.1 关系运算 430
    • 5.3.2 窗口运算 439
    • 5.3.3 基于行的操作 445
    • 5.4 Table API与DataStream API集成 451
    • 5.4.1 依赖 451
    • 5.4.2 在DataStream和Table之间转换 452
    • 5.4.3 处理insert-only流 457
    • 5.4.4 处理变更日志流 465
    • 5.5 Table API实时流处理案例 473
    • 5.5.1 传感器温度实时统计 473
    • 5.5.2 车辆超速实时监测 478
    • 5.5.3 电商用户行为实时分析 482
  • 第6章 Flink on YARN 490
    • 6.1 Flink on YARN session 490
    • 6.1.1 下载Flink集成Hadoop依赖包 490
    • 6.1.2 运行Flink on YARN session 491
    • 6.1.3 提交Flink作业 493
    • 6.1.4 停止Flink on YARN session 496
    • 6.2 Flink on YARN支持的部署模式 496
    • 6.2.1 Application模式 496
    • 6.2.2 Per-Job集群模式 497
    • 6.2.3 Session模式 497
    • 6.2.4 选择部署模式 498
  • 第7章 基于Flink构建流批一体数仓 499
    • 7.1 Flink集成Hive数仓 499
    • 7.1.1 Flink集成Hive的方式 499
    • 7.1.2 Flink集成Hive的步骤 499
    • 7.1.3 Flink连接Hive模板代码 501
    • 7.2 流批一体数仓构建实例 502
    • 7.2.1 数据集说明 503
    • 7.2.2 创建Flink项目 504
    • 7.2.3 创建执行环境 508
    • 7.2.4 注册HiveCatalog 509
    • 7.2.5 创建Kafka流表 510
    • 7.2.6 创建Hive表 512
    • 7.2.7 流写Hive表 514
    • 7.2.8 动态读取Hive流表 516
    • 7.2.9 完整示例代码 517
    • 7.2.10 执行步骤 524
    • 7.3 纯SQL构建批流一体数仓 526
    • 7.3.1 使用Flink SQL客户端 526
    • 7.3.2 集成Flink SQL Cli和Hive 528
    • 7.3.3 注册HiveCatalog 530
    • 7.3.4 使用SQL Client提交作业 533
    • 7.3.5 构建批流一体数仓完整过程 537
  • 第8章 基于Flink和Iceberg数据湖构建实时数仓 543
    • 8.1现代数据湖概述 543
    • 8.1.1 什么是数据湖 543
    • 8.1.2 数据湖架构 544
    • 8.1.3 开源数据湖框架 545
    • 8.2基于Flink + Iceberg构建企业数据湖 546
    • 8.2.1 Apache Iceberg的优势 546
    • 8.2.2 Apache Iceberg经典业务场景 547
    • 8.2.3 应用Apache Iceberg的准备工作 550
    • 8.2.4 创建和使用catalog 552
    • 8.2.5 Iceberg DDL命令 553
    • 8.2.6 Iceberg SQL查询 554
    • 8.2.7 Iceberg SQL写入 555
    • 8.2.8 使用DataStream读取 556
    • 8.2.9 使用DataStream写入 556
    • 8.2.10 重写文件操作 557
    • 8.2.11 未来改进 557
    • 8.3基于Flink + Iceberg构建准实时数仓 558
    • 8.3.1 实时数仓构建 558
    • 8.3.2 执行OLAP联机分析 561

图书前言

前 言

实时数据分析一直是个热门话题,需要实时数据分析的场景也越来越多,如金融支付中的风控、基础运维中的监控告警、实时大盘之外,AI模型也需要消费更为实时的聚合结果来达到很好的预测效果。

Apache Flink是下一代开源大数据处理引擎。它是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态计算。可部署在各种集群环境,对各种大小的数据规模进行快速计算。

Apache Flink已经被证明可以扩展到数千个内核和TB级的应用程序状态,提供高吞吐量和低延迟,并支持世界上一些要求最高的流处理应用程序。例如,Apache Flink在2019年阿里巴巴双11场景中突破实时计算消息处理峰值达到25亿条/秒,2020年双11当时的实时计算峰值达到了破纪录的每秒40亿条记录,数据量也达到了惊人的7TB每秒,相当于一秒钟需要读完500万本《新华字典》!随着2020年双11阿里基于Flink实时计算场景的成功,毋庸置疑,Flink将会加速成为大厂主流的数据处理框架,最终化身下一代大数据处理标准。

Apache Flink作为当前最热门的实时计算框架,是从业人员以及希望进入大数据行业人员必须要学习和掌握的大数据技术之一。但是作为大数据的初学者,在学习Flink时通常会遇到以下几个难题:

  • (1) 缺少面向零基础小白的Flink入门教程。 
  • (2) 缺少系统化的Flink大数据教程。 
  • (3) 现有的Flink资料、教程或图书过时陈旧。 
  • (4) 官方全英文文档难以阅读和理解。
  • (5) 缺少必要的数据集、可运行的实验案例及学习平台。 
  • ......

特别是Apache Flink从2019年被阿里巴巴收购以后,进入快速版本迭代时代,不但版本更新快,而且API变化频繁,笔者在应用和研究Apache Flink时,每当遇到Flink版本更新,就不得不花费大量精力重构已经的代码。

为此,既是为了笔者自己能更系统更及时地跟进Flink的演进和迭代,另一方面也是为了解决面向零基础小白学习Flink(以及其他大数据技术)的入门难度,编写了这一本《Flink实用教程》。个人以为,本书具有以下几个特点:

  • (1) 面向零基础小白,知识点深浅适当,代码完整易懂。 
  • (2) 内容全面系统,包括架构原理、开发环境及程序部署、流和批计算等,并特别包含了第7章“基于Flink构建批流一体数仓”和第8章“基于Flink和数据湖构建实时数仓”内容。 
  • (3) 所有代码均基于Flink 1.13.2。 
  • (4) 双语实现,大部分示例、案例,均包含Scala和Java两种语言版本的实现。

本书特别适合想要入门并深入掌握Apache Flink、流计算的同学、希望大数据系统参考教材的老师以及想要了解最新Flink版本应用的从业人员。 当然,因为水平所限,行文以内容难免错误,请大家见谅,并予以反馈,笔者会在后续的版本重构中不断提升内容质量。

返回图书列表

挣积分

用户可以上传项目资源到本站,我们会根据资源的质量和价值计算积分给用户。

用户可以使用自己账号下的积分换取本站VIP资源(教程、项目、图书等)。

请联系我们

  • Email:zz_kapper@163.com
  • QQ:185314368(张老师)