Flink
mischen520
JAVA高级架构师
展开
-
利用Flink实现市场营销商业指标统计分析
随着智能手机的普及,在如今的电商网站中已经有越来越多的用户来自移动端,相比起传统浏览器的登录方式,手机APP成为了更多用户访问电商网站的首选。对于电商企业来说,一般会通过各种不同的渠道对自己的APP进行市场推广,而这些渠道的统计数据(比如,不同网站上广告链接的点击量、APP下载量)就成了市场营销的重要商业指标。下面示例:APP市场推广统计 - 分渠道封装数据的JavaBean类package com.mischen.it.entity;import lombok.AllArgsConstructo原创 2021-09-02 23:53:26 · 251 阅读 · 0 评论 -
什么是Azkaban?
Azkaban是一个工作流调度系统,为什么需要工作流调度系统1)一个完整的数据分析系统通常都是由大量任务单元组成:Shell脚本程序,Java程序,MapReduce程序、Hive脚本等2)各任务单元之间存在时间先后及前后依赖关系3)为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行常见工作流调度系统1)简单的任务调度:直接使用Linux的Crontab来定义;2)复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如Azkaban、Ooize、Airflow、Dol原创 2021-07-24 14:19:25 · 406 阅读 · 0 评论 -
Flink计算资源的调度是如何实现的?
TaskManager中最细粒度的资源是Task slot,代表了一个固定大小的资源子集,每个TaskManager会将其所占有的资源平分给它的slot。通过调整 task slot 的数量,用户可以定义task之间是如何相互隔离的。每个 TaskManager 有一个slot,也就意味着每个task运行在独立的 JVM 中。每个 TaskManager 有多个slot的话,也就是说多个task运行在同一个JVM中。而在同一个JVM进程中的task,可以共享TCP连接(基于多路复用)和心跳消息,可以减少原创 2021-07-24 13:49:35 · 600 阅读 · 0 评论 -
Flink Job的提交流程
用户提交的Flink Job会被转化成一个DAG任务运行,分别是:StreamGraph、JobGraph、ExecutionGraph,Flink中JobManager与TaskManager,JobManager与Client的交互是基于Akka工具包的,是通过消息驱动。整个Flink Job的提交还包含着ActorSystem的创建,JobManager的启动,TaskManager的启动和注册。...原创 2021-07-12 08:12:31 · 336 阅读 · 1 评论 -
什么是Operator Chains(算子链)?
为了更高效地分布式执行,Flink会尽可能地将operator的subtask链接(chain)在一起形成task。每个task在一个线程中执行。将operators链接成task是非常有效的优化:它能减少线程之间的切换,减少消息的序列化/反序列化,减少数据在缓冲区的交换,减少了延迟的同时提高整体的吞吐量。这就是我们所说的算子链。...原创 2021-07-11 10:46:46 · 711 阅读 · 0 评论 -
Flink的反压和Strom有哪些不同?
Storm 是通过监控 Bolt 中的接收队列负载情况,如果超过高水位值就会将反压信息写到 Zookeeper ,Zookeeper 上的 watch 会通知该拓扑的所有 Worker 都进入反压状态,最后 Spout 停止发送 tuple。Flink中的反压使用了高效有界的分布式阻塞队列,下游消费变慢会导致发送端阻塞。二者最大的区别是Flink是逐级反压,而Storm是直接从源头降速。...原创 2021-07-11 10:45:09 · 158 阅读 · 0 评论 -
Flink是如何处理反压的?
Flink 内部是基于 producer-consumer 模型来进行消息传递的,Flink的反压设计也是基于这个模型。Flink 使用了高效有界的分布式阻塞队列,就像 Java 通用的阻塞队列(BlockingQueue)一样。下游消费者消费变慢,上游就会受到阻塞。...原创 2021-07-11 10:43:05 · 289 阅读 · 0 评论 -
Flink任务延迟高,想解决这个问题,你会如何入手?
在Flink的后台任务管理中,我们可以看到Flink的哪个算子和task出现了反压。最主要的手段是资源调优和算子调优。资源调优即是对作业中的Operator的并发数(parallelism)、CPU(core)、堆内存(heap_memory)等参数进行调优。作业参数调优包括:并行度的设置,State的设置,checkpoint的设置。...原创 2021-07-11 10:41:18 · 681 阅读 · 0 评论 -
Flink中在使用聚合函数 GroupBy、Distinct、KeyBy 等函数时出现数据热点该如何解决?
数据倾斜和数据热点是所有大数据框架绕不过去的问题。处理这类问题主要从3个方面入手:在业务上规避这类问题例如一个假设订单场景,北京和上海两个城市订单量增长几十倍,其余城市的数据量不变。这时候我们在进行聚合的时候,北京和上海就会出现数据堆积,我们可以单独数据北京和上海的数据。Key的设计上把热key进行拆分,比如上个例子中的北京和上海,可以把北京和上海按照地区进行拆分聚合。参数设置Flink 1.9.0 SQL(Blink Planner) 性能优化中一项重要的改进就是升级了微批模型,即原创 2021-07-11 08:21:44 · 978 阅读 · 0 评论 -
Flink中的Window出现了数据倾斜,你有什么解决办法?
window产生数据倾斜指的是数据在不同的窗口内堆积的数据量相差过多。本质上产生这种情况的原因是数据源头发送的数据量速度不同导致的。出现这种情况一般通过两种方式来解决:在数据进入窗口前做预聚合重新设计窗口聚合的key...原创 2021-07-11 08:17:51 · 365 阅读 · 0 评论 -
Flink是如何保证Exactly-once语义的?
Flink通过实现两阶段提交和状态保存来实现端到端的一致性语义。分为以下几个步骤:开始事务(beginTransaction)创建一个临时文件夹,来写把数据写入到这个文件夹里面预提交(preCommit)将内存中缓存的数据写入文件并关闭正式提交(commit)将之前写完的临时文件放入目标目录下。这代表着最终的数据会有一些延迟丢弃(abort)丢弃临时文件若失败发生在预提交成功后,正式提交前。可以根据状态来提交预提交的数据,也可删除预提交的数据。...原创 2021-07-11 08:06:36 · 588 阅读 · 0 评论 -
Flink是如何做容错的?
Flink 实现容错主要靠强大的CheckPoint机制和State机制。Checkpoint 负责定时制作分布式快照、对程序中的状态进行备份;State 用来存储计算过程中的中间状态。原创 2021-07-11 07:33:33 · 383 阅读 · 0 评论 -
Flink是如何做到高效的数据交换的?
在一个Flink Job中,数据需要在不同的task中进行交换,整个数据交换是有 TaskManager 负责的,TaskManager 的网络组件首先从缓冲buffer中收集records,然后再发送。Records 并不是一个一个被发送的,二是积累一个批次再发送,batch 技术可以更加高效的利用网络资源。...原创 2021-07-11 07:29:04 · 545 阅读 · 0 评论 -
Flink分布式快照的原理是什么?
Flink的容错机制的核心部分是制作分布式数据流和操作算子状态的一致性快照。 这些快照充当一致性checkpoint,系统可以在发生故障时回滚。 Flink用于制作这些快照的机制在“分布式数据流的轻量级异步快照”中进行了描述。 它受到分布式快照的标准Chandy-Lamport算法的启发,专门针对Flink的执行模型而定制。barriers在数据流源处被注入并行数据流中。快照n的barriers被插入的位置(我们称之为Sn)是快照所包含的数据在数据源中最大位置。例如,在Apache Kaf.原创 2021-07-11 07:30:46 · 1613 阅读 · 0 评论 -
Flink 中的Watermark机制
Watermark 是一种衡量 Event Time 进展的机制,可以设定延迟触发Watermark 是用于处理乱序事件的,而正确的处理乱序事件,通常用Watermark 机制结合 window 来实现;数据流中的 Watermark 用于表示 timestamp 小于 Watermark 的数据,都已经到达了,因此,window 的执行也是由 Watermark 触发的。...原创 2021-07-08 23:14:13 · 203 阅读 · 2 评论 -
说说Flink中的窗口?
Flink 支持两种划分窗口的方式,按照time和count。如果根据时间划分窗口,那么它就是一个time-window 如果根据数据划分窗口,那么它就是一个count-window。flink支持窗口的两个重要属性(size和interval)如果size=interval,那么就会形成tumbling-window(无重叠数据) 如果size>interval,那么就会形成sliding-window(有重叠数据) 如果size< interval, 那么这种窗口将会丢失数据。比如...原创 2021-07-08 23:10:41 · 159 阅读 · 0 评论 -
Flink CEP 编程中当状态没有到达的时候会将数据保存在哪里?
在流式处理中,CEP 当然是要支持 EventTime 的,那么相对应的也要支持数据的迟到现象,也就是watermark的处理逻辑。CEP对未匹配成功的事件序列的处理,和迟到数据是类似的。在 Flink CEP的处理逻辑中,状态没有满足的和迟到的数据,都会存储在一个Map数据结构中,也就是说,如果我们限定判断事件序列的时长为5分钟,那么内存中就会存储5分钟的数据...原创 2021-07-08 23:07:19 · 511 阅读 · 0 评论 -
Flink是怎样保证Exactly-Once
下级存储支持事务:Flink可以通过实现两阶段提交和状态保存来实现端到端的一致性语义。 分为以下几个步骤:1)开始事务(beginTransaction)创建一个临时文件夹,来写把数据写入到这个文件夹里面2)预提交(preCommit)将内存中缓存的数据写入文件并关闭3)正式提交(commit)将之前写完的临时文件放入目标目录下。这代表着最终的数据会有一些延迟4)丢弃(abort)丢弃临时文件5)若失败发生在预提交成功后,正式提交前。可以根据状态来提交预提交的数据,也可删除预提交的数据。原创 2021-07-05 20:42:31 · 263 阅读 · 0 评论 -
什么是布隆过滤器?
布隆过滤器(Bloom Filter,下文简称BF)由Burton Howard Bloom在1970年提出,是一种空间效率高的概率型数据结构。它专门用来检测集合中是否存在特定的元素。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。这就是布隆原创 2021-07-01 20:46:37 · 221 阅读 · 0 评论 -
Flink + Kafka怎样保证exactly-once
内部 —— 利用checkpoint机制,把状态存盘,发生故障的时候可以恢复,保证内部的状态一致性 source —— kafka consumer作为source,可以将偏移量保存下来,如果后续任务出现了故障,恢复的时候可以由连接器重置偏移量,重新消费数据,保证一致性 sink —— kafka producer作为sink,采用两阶段提交 sink,需要实现一个 TwoPhaseCommitSinkFunction内部的checkpoint机制我们已经有了了解,那source和sink具体又是怎样原创 2021-07-01 08:09:14 · 300 阅读 · 0 评论 -
checkpoint和savepoint的区别
Savepoint Checkpoint Savepoint是由命令触发,由用户创建和删除 Checkpoint被保存在用户指定的外部路径中,flink自动触发 保存点存储在标准格式存储中,并且可以升级作业版本并可以更改其配置。 当作业失败或被取消时,将保留外部存储的检查点。 用户必须提供用于还原作业状态的保存点的路径。 用户必须提供用于还原作业...原创 2021-07-01 07:59:32 · 453 阅读 · 0 评论 -
Savepoint原理
Flink 还提供了可以自定义的镜像保存功能,就是保存点(savepoints) 原则上,创建保存点使用的算法与检查点完全相同,因此保存点可以认为就是具有一些额外元数据的检查点 Flink不会自动创建保存点,因此用户(或外部调度程序)必须明确地触发创建操作 保存点是一个强大的功能。除了故障恢复外,保存点可以用于:有计划的手动备份,更新应用程序,版本迁移,暂停和重启应用,等等...原创 2021-07-01 07:50:53 · 151 阅读 · 0 评论 -
FlinkCEP开发实战
1.导入pom依赖:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apach原创 2021-06-30 11:04:10 · 263 阅读 · 0 评论 -
Flink CEP应用场景
风险控制对用户异常行为模式进行实时检测,当一个用户发生了不该发生的行为,判定这个用户是不是有违规操作的嫌疑。策略营销用预先定义好的规则对用户的行为轨迹进行实时跟踪,对行为轨迹匹配预定义规则的用户实时发送相应策略的推广。运维监控灵活配置多指标、多依赖来实现更复杂的监控模式。...原创 2021-06-30 10:39:55 · 648 阅读 · 0 评论 -
什么是FlinkCEP
FlinkCEP(Complex event processing for Flink) 是在Flink实现的复杂事件处理库. 它可以让你在无界流中检测出特定的数据,有机会掌握数据中重要的那部分。是一种基于动态环境中事件流的分析技术,事件在这里通常是有意义的状态变化,通过分析事件间的关系,利用过滤、关联、聚合等技术,根据事件间的时序关系和聚合关系制定检测规则,持续地从事件流中查询出符合要求的事件序列,最终分析得到更复杂的复合事件。目标:从有序的简单事件流中发现一些高阶特征 输入:一个或多个由简单事原创 2021-06-30 10:38:22 · 194 阅读 · 0 评论 -
Flink状态的一致性
当在分布式系统中引入状态时,自然也引入了一致性问题。一致性实际上是"正确性级别"的另一种说法,也就是说在成功处理故障并恢复之后得到的结果,与没有发生任何故障时得到的结果相比,前者到底有多正确?举例来说,假设要对最近一小时登录的用户计数。在系统经历故障之后,计数结果是多少?如果有偏差,是有漏掉的计数还是重复计数?一致性级别在流处理中,一致性可以分为3个级别:at-most-once(最多一次):这其实是没有正确性保障的委婉说法——故障发生之后,计数结果可能丢失。at-least-once原创 2021-06-30 10:31:05 · 121 阅读 · 0 评论 -
基于埋点日志数据的网络流量统计(网站独立访客数(UV)的统计)
在实际应用中,我们往往还会关注,到底有多少不同的用户访问了网站,所以另外一个统计流量的重要指标是网站的独立访客数(Unique Visitor,UV)1.假设我们已经采集到数据UserBehavior,并将数据放在工程目录input下面,截图如下:文件格式如下:自己可以随便写一个csv文件就行,用excel打开就是每个填充一个,用notepad++打开就是以,分开2.创建bean:package com.mischen.it.entity;import lombok.AllA.原创 2021-06-30 08:33:35 · 598 阅读 · 0 评论 -
基于埋点日志数据的网络流量统计(网站总浏览量(PV)的统计)
衡量网站流量一个最简单的指标,就是网站的页面浏览量(Page View,PV)。用户每次打开一个页面便记录1次PV,多次打开同一页面则浏览量累计。一般来说,PV与来访者的数量成正比,但是PV并不直接决定页面的真实来访者数量,如同一个来访者通过不断的刷新页面,也可以制造出非常高的PV。接下来我们就用咱们之前学习的Flink算子来实现PV的统计1.假设我们已经采集到数据UserBehavior,并将数据放在工程目录input下面,截图如下:文件格式如下:自己可以随便写一个csv文件就行,用.原创 2021-06-30 08:18:08 · 967 阅读 · 1 评论 -
Flink编程(filter编程示例)
作用根据指定的规则将满足条件(true)的数据保留,不满足条件(false)的数据丢弃package com.mischen.it;import org.apache.flink.api.common.functions.FilterFunction;import org.apache.flink.api.common.functions.FlatMapFunction;import org.apache.flink.api.common.functions.MapFunction;im原创 2021-06-29 10:52:19 · 530 阅读 · 0 评论 -
Flink编程(RichMapFunction)
package com.mischen.it;import org.apache.flink.api.common.functions.MapFunction;import org.apache.flink.api.common.functions.RichMapFunction;import org.apache.flink.configuration.Configuration;import org.apache.flink.streaming.api.environment.StreamE.原创 2021-06-29 10:29:05 · 3788 阅读 · 0 评论 -
Flink编程(静态内部类)
package com.mischen.it;import org.apache.flink.api.common.functions.MapFunction;import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;/** * @ClassName Flink01_TransForm_Map_Anonymous * @Description 得到一个新的数据流: 新的流的元素是原来流的元素的平方.原创 2021-06-29 10:21:00 · 595 阅读 · 0 评论 -
Flink编程(Lambda表达式的运用)
得到一个新的数据流:新的流的元素是原来流的元素的平方package com.mischen.it;import org.apache.flink.api.common.functions.MapFunction;import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;/** * @ClassName Flink01_TransForm_Map_Anonymous * @Descriptio.原创 2021-06-29 09:46:42 · 178 阅读 · 0 评论 -
Flink使用MapFunction实现类编程
得到一个新的数据流:新的流的元素是原来流的元素的平方package com.mischen.it;import org.apache.flink.api.common.functions.MapFunction;import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;/** * @ClassName Flink01_TransForm_Map_Anonymous * @Descriptio.原创 2021-06-29 09:43:50 · 1212 阅读 · 0 评论 -
Flink从Kafka读取数据
1.添加依赖:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.o原创 2021-06-29 09:28:52 · 223 阅读 · 0 评论 -
Flink从Java的集合中读取数据
1.在pom文件中导入依赖包:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.原创 2021-06-29 09:12:14 · 453 阅读 · 0 评论 -
Flink提交流程
原创 2021-06-29 08:34:11 · 112 阅读 · 0 评论 -
yarn-cluster提交流程per-job
Flink任务提交后,Client向HDFS上传Flink的Jar包和配置 向Yarn ResourceManager提交任务,ResourceManager分配Container资源 通知对应的NodeManager启动ApplicationMaster,ApplicationMaster启动后加载Flink的Jar包和配置构建环境,然后启动JobManager ApplicationMaster向ResourceManager申请资源启动TaskManager ResourceManager..原创 2021-06-23 08:32:08 · 313 阅读 · 0 评论 -
Flink CEP 编程中当状态没有到达的时候会将数据保存在哪里?
在流式处理中,CEP 当然是要支持 EventTime 的,那么相对应的也要支持数据的迟到现象,也就是watermark的处理逻辑。CEP对未匹配成功的事件序列的处理,和迟到数据是类似的。在 Flink CEP的处理逻辑中,状态没有满足的和迟到的数据,都会存储在一个Map数据结构中,也就是说,如果我们限定判断事件序列的时长为5分钟,那么内存中就会存储5分钟的数据,这在我看来,也是对内存的极大损伤之一。...原创 2021-06-21 20:17:09 · 241 阅读 · 0 评论 -
说一下Flink的状态机制
Flink在做计算的过程中经常需要存储中间状态,来避免数据丢失和状态恢复。选择的状态存储策略不同,会影响状态持久化如何和 checkpoint 交互。Flink提供了三种状态存储方式:MemoryStateBackend、FsStateBackend、RocksDBStateBackend。...原创 2021-06-21 20:09:13 · 533 阅读 · 0 评论 -
Flink的三种时间语义
Event Time:是事件创建的时间。它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink通过时间戳分配器访问事件时间戳。Ingestion Time:是数据进入Flink的时间。Processing Time:是每一个执行基于时间操作的算子的本地系统时间,与机器相关,默认的时间属性就是Processing Time。...原创 2021-06-21 08:31:04 · 724 阅读 · 0 评论