《2019年使用Flink框架搭建流计算平台.pdf》由会员分享,可在线阅读,更多相关《2019年使用Flink框架搭建流计算平台.pdf(79页珍藏版)》请在三个皮匠报告上搜索。
1、如何用Flink实现计算平台议题内容一、Flink 核心编程模型1.海量数据计算发展趋势2.Flink 核心编程模型3.Flink vs Spark vs Beam二、海量数据计算平台的挑战与方案1.流式计算开发运维痛点2.搭建计算平台的常见方案三、深入 Flink核心特性1.哪些功能是Flink的核心特性?2.Flink核心特性的最佳实践3.深入Flink核心特性的原理和代码四、如何用Flink搭建计算平台1.利用Flink搭建计算平台的关键特性2.使用Flink搭建计算平台的核心代码五、开源项目Waterdrop源码分析1.功能分析2.流程控制代码分析3.插件代码分析六、Flink计算平台
2、与业务场景结合1.实时数据仓库2.电商大屏3.广告点击4.业务监控5.内容推荐一、Flink 核心编程模型一、Flink 核心编程模型Unbounded StreamBounded Stream一、Flink 核心编程模型一、Flink 核心编程模型一、Flink 核心编程模型一、Flink 核心编程模型一、Flink 核心编程模型-Submit Job1.https:/ Flink核心特性总结:1.Flink特性:功能强、有状态、低延迟,高吞吐、ExactlyOnce2.Flink 流式计算表现惊艳主要特性:Flink DataStream:有状态的数据处理、状态管理和容错(Flink Ch
3、eckpoint)Flink DataStream:Window,Watermark,异步IO、Flink 流批统一Flink Connector(分别对应 DataStream,Dataset,Table)Flink Table/SQL API,交互式SQL工作流(sql-client)?Pipeline 构建:Flink流关联(Interval Join),纬表Join,多路输出强大的 Flink Metrics+WebUI 体系Flink Runtime任务调度协调三、深入 Flink核心特性-Time,Window,WatermarkFlink 中有3种Time:Event-Time,
4、Processing-Time 以及 Ingestion-Time三、深入 Flink核心特性-Time,Window,WatermarkFlink 中有3种Time:Event-Time,Processing-Time 以及 Ingestion-TimeTODO:TimestampAssigner三、深入 Flink核心特性-Time,Window,Watermark在 Flink 中 Window 可以将无限流切分成有限流,是处理有限流的核心组件三、深入 Flink核心特性-Time,Window,WatermarkWindow 中数据的生命周期:三、深入 Flink核心特性-Time,W
5、indow,Watermarkwindow()指定 WindowAssigner:WindowAssigner 负责将每条输入的数据分发到正确的 window 中(一条数据可能同时分发到多个 Window 中),Flink 提供了几种通用的 WindowAssigner:Tumbling Window(滚动窗口)Sliding Window(滑动窗口)Session Window(会话窗口)Global Window(全局窗口)Custom Window(自定义窗口,自己定制数据分发策略)三、深入 Flink核心特性-Time,Window,WatermarkTumbling Window三、
6、深入 Flink核心特性-Time,Window,WatermarkSliding Window三、深入 Flink核心特性-Time,Window,WatermarkSession Window三、深入 Flink核心特性-Time,Window,WatermarkGlobal Window三、深入 Flink核心特性-Time,Window,Watermark三、深入 Flink核心特性-Time,Window,Watermark三、深入 Flink核心特性-Time,Window,WatermarkWatermark:watermark 会携带一个单调递增的时间戳 t,watermark
7、(t)表示所有时间戳不大于 t 的数据都已经到来了,未来小于等于 t 的数据不会再来,因此可以放心地触发和销毁窗口了。回顾:Window和Watermark 什么关系?三、深入 Flink核心特性-Time,Window,Watermark迟到的数据:设置 allowedLateness()设置 allowedLateness 之后,迟来的数据同样可以触发窗口,进行输出,利用Flink 的 side output 机制,我们可以获取到这些迟到的数据:三、深入 Flink核心特性-Time,Window,WatermarkWindow 内部实现:Window 中数据也是通过State进行维护的支
8、持Flink使用State/Checkpoint技术来保证Exactly-Once语义三、深入 Flink核心特性-状态管理和容错三、深入 Flink核心特性-状态管理和容错内存管理状态的弊端:三、深入 Flink核心特性-状态管理和容错理想的状态管理:三、深入 Flink核心特性-状态管理和容错Managed State&Raw State三、深入 Flink核心特性-状态管理和容错Keyed State&Operator State回顾:1.Keyed Stream vs Non-Keyed Stream?2.Keyed State vs Operator State?三、深入 Flink
9、核心特性-状态管理和容错Keyed State 之间的关系:三、深入 Flink核心特性-状态管理和容错Keyed State的使用方法:三、深入 Flink核心特性-状态管理和容错Checkpoint:三、深入 Flink核心特性-状态管理和容错三、深入 Flink核心特性-状态管理和容错StateBackend:MemoryStateBackend三、深入 Flink核心特性-状态管理和容错StateBackend:FsStateBackend三、深入 Flink核心特性-状态管理和容错StateBackend:RocksDBStateBackend三、深入 Flink核心特性-状态管理和
10、容错一个经典案例:Kafka Source管理 Kafka Topic Offset回顾:Flink与 Kafka 协同工作并确保来自Kafka topic 的消息以 exactly-once 的语义被处理是Flink内部的还是端到端的?Flink 中实现的 Kafka 消费者是一个有状态的算子(source operator)。Kafka Source Operator 的状态(State)中存储了所有 Kafka Topic 分区的读取偏移量。Flink 的检查点机制与 Kafka 协同工作并确保来自 Kafka topic 的消息以 exactly-once 的语义被处理。当一个检查点被
11、触发时,每一个分区的偏移量都被存到了这个检查点中。Flink 的检查点机制保证了所有 operator task 的存储状态都是一致的。三、深入 Flink核心特性-状态管理和容错一个经典案例:Kafka Source管理 Kafka Topic Offset,Step 1:432 1 0432 1 0一个 Kafka topic,有两个partition,每个partition都含有“A”,“B”,“C”,”D”,“E”5条消息。三、深入 Flink核心特性-状态管理和容错一个经典案例:Kafka Source管理 Kafka Topic Offset,Step 2:Kafka comsum
12、er(消费者)开始从 partition 0 读取消息。消息“A”正在被处理,第一个 consumer 的 offset 变成了1。三、深入 Flink核心特性-状态管理和容错一个经典案例:Kafka Source管理 Kafka Topic Offset,Step 3:消息“A”到达了 Flink Map Task。两个 consumer 都开始读取他们下一条消息(partition 0 读取“B”,partition 1 读取“A”)。各自将 offset 更新成 2 和 1。同时,Flink 的 JobMaster 开始在 source 触发了一个检查点。三、深入 Flink核心特性-状
13、态管理和容错一个经典案例:Kafka Source管理 Kafka Topic Offset,Step 4:三、深入 Flink核心特性-状态管理和容错一个经典案例:Kafka Source管理 Kafka Topic Offset,Step 5:Flink Map Task 收齐了同一版本的全部 checkpoint barrier 后,那么就会将它自己的状态也存储到 JobMaster。同时,consumer 会继续从 Kafka 读取消息。三、深入 Flink核心特性-状态管理和容错一个经典案例:Kafka Source管理 Kafka Topic Offset,Step 6:三、深入
14、Flink核心特性-状态管理和容错一个经典案例:Kafka Source管理 Kafka Topic Offset,Failover:三、深入 Flink核心特性-AsyncIOSync IO vs AsyncIOAsyncIO 的两种实现方式:需要一个支持异步请求的客户端或者将同步客户端丢到线程池中执行作为异步客户端三、深入 Flink核心特性-AsyncIOAsyncIO 使用方式三、深入 Flink核心特性-AsyncIOAsyncIO 使用方式回顾:AsyncIO 在哪里生成的Watermark?三、深入 Flink核心特性-AsyncIOAsyncIO 实现原理之-AsyncWait
15、Operator,AsyncFunction,ResultFuture三、深入 Flink核心特性-AsyncIOAsyncIO 实现原理之-AsyncWaitOperator,AsyncFunction,ResultFuture三、深入 Flink核心特性-AsyncIOAsyncIO 实现原理之-AsyncWaitOperator,AsyncFunction,ResultFuture三、深入 Flink核心特性-Flink Metrics+WebUIReports:JMXGraphiteInfluxDBPrometheusStatsDDatadogSlf4j三、深入 Flink核心特性-F
16、link SQL物化视图:话虽如此,使用 SQL 处理流并不是不可能的。一些关系型数据库系统维护了物化视图,类似于在流数据中评估 SQL 查询。物化视图被定义为一个 SQL 查询,就像常规(虚拟)视图一样。但是,查询的结果实际上被保存(或者是物化)在内存或硬盘中,这样视图在查询时不需要实时计算。为了防止物化视图的数据过时,数据库系统需要在其基础关系(定义的 SQL 查询引用的表)被修改时更新更新视图。如果我们将视图的基础关系修改视作修改流(或者是更改日志流),物化视图的维护和流中的 SQL 的关系就变得很明确了。Why SQL?SQL 是声明式的:你指定你想要的东西,而不是如何去计算;SQL
17、可以进行有效的优化:优化器计估算有效的计划来计算结果;SQL 可以进行有效的评估:处理引擎准确的知道计算内容,以及如何有效的执行;最后,所有人都知道的,许多工具都理解 SQL。./bin/sql-client.sh em三、深入 Flink核心特性-Flink SQL 核心功能TODO:https:/ Flink核心特性-Flink SQL 核心功能三、深入 Flink核心特性-Flink SQL 核心功能三、深入 Flink核心特性-Flink SQL 核心功能三、深入 Flink核心特性-Flink SQL 核心功能三、深入 Flink核心特性-Flink SQL 核心功能三、深入 Fli
18、nk核心特性-Flink SQL 核心功能三、深入 Flink核心特性-Flink SQL 核心功能三、深入 Flink核心特性-Flink SQL 核心功能三、深入 Flink核心特性-Flink SQL 核心功能三、深入 Flink核心特性-Flink SQL 核心功能三、深入 Flink核心特性-Flink SQL 核心功能三、深入 Flink核心特性-Flink SQL 之 Retraction(Without)通俗讲retract就是传统数据里面的更新操作,也就是说retract是流式计算场景下对数据更新的处理方式。首先来看下流场景下的一个词频统计列子。三、深入 Flink核心特性-
19、Flink SQL 之 Retraction(With)五、开源项目Waterdrop源码分析(生产环境的Flink,Spark流式计算产品)https:/ 是一个非常易用,高性能、支持实时流式和离线批处理的海量数据处理产品,架构于Apache Spark 和 Apache Flink之上。五、开源项目Waterdrop源码分析(生产环境的Flink,Spark流式计算产品)https:/ 是什么?简单易用,灵活配置,无需开发实时流式处理离线多源数据分析高性能海量数据处理能力模块化和插件化,易于扩展支持利用SQL做数据处理和聚合支持Spark 2.x五、开源项目Waterdrop源码分析(生产环境的Flink,Spark流式计算产品)https:/ 日志聚合入ESWaterdrop 配置示例:五、开源项目Waterdrop源码分析(生产环境的Flink,Spark流式计算产品)https:/ Star增长趋势:五、开源项目Waterdrop源码分析(生产环境的Flink,Spark流式计算产品)https:/