Flink
文章平均质量分 74
淡定一生2333
这个作者很懒,什么都没留下…
展开
-
Flink之双流Join原理解析
之前研究了SparkSQL中Join的原理,本文来研究下Flink中的两条流Join的原理。Flink双流Join的demo可见参考中的链接,那位博主Demo写的非常的好。 Flink中的Join分为WindowJoin和Interval join两种。前者是将数据缓存在Window中,然后再进行Join,所以本质上其实和SparkSQL中的Join一样,算是个离线数据Join;Interval join不太一样,是一条流中的每个元素和另外一条流某个时间范围区间的所有元素进行...原创 2021-08-25 22:04:18 · 6100 阅读 · 0 评论 -
Flink二阶段提交方式写入MySQL
项目中需要使用Flink消费Kafka中的数据,然后使用二阶段提交的方式写入到MySQL里面。网上找到了一大堆相关的例子,但是没有一个是靠谱的,全TM是复制粘贴而且还是不能用的那种! 开发+调试,浪费了我好几天的时间,哎,其实也是自己太菜了。所以本文就是解析下Flink二阶段提交的源码,然后给出自己的二阶段提交的实现。如果文章中有错误,非常欢迎大家的指正,多多交流!网上找到的Flink二阶段方式写入MySQL的代码:完整代码我就不贴全了,反正都是差不多类似如下的代码:packa...原创 2021-06-25 08:27:30 · 2627 阅读 · 4 评论 -
Flink的背压机制
想起来之前被问到了一个问题,如果Flink中的Task是一直不停的运行的话,那么拉取Kafka数据的Source端是不是会一直不停的拉取数据,如果消费速度不及时,内存不就很快会被撑爆了么?一开始对这个问题是一脸闷逼,后来随着对Flink使用的逐渐深入,对Flink的内部也有了一定的了解,所以本文就来了解下Flink内部的反压机制,看下反压机制是如何解决该问题的。什么是反压以及反压所带来的影响?在流处理系统中,出现下游消费的速度跟不上上游生产数据的速度,就种现象就叫做反压。出现反压时...原创 2020-11-18 22:58:44 · 10202 阅读 · 4 评论 -
Flink的低延迟、高吞吐与Task之间的通信机制
Flink自称是一个低延迟、高吞吐、有状态、容错的流式计算矿建。其中容错在之前的《Flink的ExactlyOnce语义与Checkpoint的实现》文章中已经说过了,容错是在数据流中周期性的注入一条CheckPointBarrier记录,各Task看到这种记录时,会将State持久化到后端存储中。如果发生了异常,可以从CheckPoint目录中恢复任务运行以及状态。 本文主要了解下Flink是如何实现低延迟与高吞吐的。低延迟 VS高吞吐: 低延迟和高吞吐其实是悖论。...原创 2020-10-19 22:18:45 · 2506 阅读 · 0 评论 -
Flink中的状态一致性(再细说下Checkpoint)
CheckPoint流程如下:Coordinator发起trigger Source中注入barrier Source保存自己的状态 将状态的保存路径state handle汇报给coordinator下游task接收到barrier后继续保存状态,并向下继续传递barrier所有的operator都snapshot完成后,jobmanager会标记此次Checkpoint为completed checkpoint,并将meta存储到backend中...原创 2020-09-13 22:54:23 · 2507 阅读 · 4 评论 -
Flink中的Window原理分析
Flink中Window的概念及原理分析Window的作用: Window是无限流上的一种核心机制,可以将流按照用户指定的策略分隔为一个个有限大小的窗口,然后对窗口中的数据进行聚合或者一些复杂计算的操作,例如统计最近5分钟某网站的点击数。 在流式计算领域,Window概念具有通用性,并非是Flink特有的机制。Window中的一些概念:先再来回顾下Flink中的几种时间概念:Event Time:事件时间指的是数据真实发生的时间,这个时间在进入Flink之前已经记录到了数...原创 2020-08-17 08:34:15 · 1454 阅读 · 0 评论 -
Flink的容错机制了解
本文介绍下Flink的容错机制,目的主要是了解下如果Flink环境发生异常,会不会对计算结果造成影响。JobManager的容错: Flink JobManager的HA仅支持StandAlone和Yarn Cluster两种集群模式。StandAlone和Yarn Cluster模式下的HA实现方式各不相同: Standalone 集群的 JobManager 高可用性的概念是,任何时候都有一个主 JobManager 和 多个备 JobManagers,在主JobM...原创 2020-08-07 08:31:56 · 1658 阅读 · 0 评论 -
Flink如何清除过期的CheckPoint
生产环境中,Flink Job运行过程中会定期执行CheckPoint,将内部状态持久化到外部的存储系统中,一般会选择使用HDFS。多种外部存储系统之间的差异详见之前写的那篇文章《Flink的状态后端(State Backends)》。随着程序不停的执行, CheckPoint文件会越来越多,如何清理过期的文件就是一个很大的问题。 一般建议大家选用RocksDB作为StateBackend。RocksDB使用的LSM树,会将状态存储到磁盘sst文件(类似HBase中的HFile)中,避免S...原创 2020-07-15 23:37:03 · 6932 阅读 · 3 评论 -
Flink的状态后端(State Backends)
一、前言 Flink提供不同的状态后端(State Backend)来区分状态的存储方式和存储位置。Flink状态可以存储在java堆内存内或者内存之外。通过状态后端的设置,Flink允许应用持有大容量的状态。开发者可以在不改变应用逻辑的情况下设置状态后端。二、可用的State BackendFlink提供三种开箱即用的State Backend:MemoryStateBackend FsStateBackend RocksDBStateBackend 2.1...转载 2020-06-30 22:42:54 · 8753 阅读 · 0 评论 -
Flink Job启动及执行流程分析
之前写过一篇文章分析过Flink的基本架构,当时大概了解了JobManager、TaskManager、Slot等概念,本文主要是想了解下Flink中Job的执行流程,老是把Job执行当成一个黑盒总感觉难受。 之前说过FlinkJob Client负责讲任务提交给JobManager执行,Client可以和JobManager通信获取作业的执行状态。JobManager负责接收Flink作业、资源管理(Slot)、task调度、Checkpoint发起等等,TaskManager负责真正...原创 2020-06-27 21:57:31 · 4261 阅读 · 1 评论 -
Flink的内存模型的一些个人理解
其实官方文档中的对于Flink内存模型讲解的已经很详细了,本文主要是介绍下个人对这个内存模型的理解,如果有理解不对的地方,希望大家帮忙指正下! 因为接触Flink的时间比较晚,所以一上来我们使用的就是V1.10版本,TaskManager的内存模型与配置在该版本中做了很大的优化。Flink 1.10之前的的内存模型存在的缺点: 1.流处理与批处理内存配置方法不同。比如TaskManager这块内存,在批处理中有用,在流处理中使用不到的 2.内存配置细节繁...原创 2020-06-19 00:27:48 · 2194 阅读 · 0 评论 -
Flink的ExactlyOnce语义与Checkpoint的实现
本文主要是想了解下Flink如何实现Exactly_Once语义以及它的CheckPoint机制。消息发送三种语义介绍:我们在一般的流处理程序中,消息发送会有三种处理语义:At_Most_Once: 至多一次,表示一条消息不管后续处理成功与否只会被消费处理一次At_Least_Once: 至少一次,表示一条消息从消费到后续的处理成功,可能会发生多次Exactly_Once: 精确一次,表示一条消息从其消费到后续的处理成功,只会发生一次 ...原创 2020-06-14 23:47:46 · 2058 阅读 · 0 评论 -
Strom、SparkStreaming以及Flink三种流式框架了解
本文主要是想了解下Storm、Flink、Spark Streaming这三种流式计算框架的区别以及它们适合的应用场景。Storm:Storm 是 Twitter 开源的分布式实时大数据处理框架,擅长处理海量数据,适用于数据实时处理而非批处理。Storm也是主从架构,主节点Nimbus负责资源分配和任务调度,工作节点Supervisor负责真正执行任务。一个Supervisor可以有多个工作进程Worker,每个工作进程中可以运行多个Task,每个Task都是一个线程,执行实...原创 2020-06-10 23:28:31 · 1555 阅读 · 0 评论 -
Flink运行时环境介绍
一. Apache Flink是什么? Apache Flink 是一个开源的分布式,高性能,高可用,准确的流处理框架。支持实时流处理和批处理。无界流有定义流的开始,但没有定义流的结束。无界流的数据必须持续立即处理,通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。无界流处理通常被称为流式处理。有界流有定义流的开始,也有定义流的结束。有界流处理通常被称为批处理二. Flink基本架构Flink也是Master/Slave架构, 运行时包含两类进...原创 2020-06-07 22:46:17 · 1131 阅读 · 0 评论 -
Kafka部分Partition中无数据导致Window不触发问题
业务上需要将同一个时间段的两种数据收集到一起做一些计算,这两种数据分别存在于Kafka的两个Topic中。计算逻辑是这样的: 使用两个DataStream分别消费两个Topic中的数据,对两条流先分别设置WaterMark,然后union,接着进行keyBy操作,最后使用Window将同一个时间窗口中的两种数据汇聚在一起进行计算。但是发现程序无论是在本地运行还是在yarn-cluster模式下运行,只要并行度不为1,程序都不能正常执行。明明显示已经收到了数据,但是Window就是不触发:...原创 2020-05-11 10:29:36 · 2049 阅读 · 1 评论 -
记录下Flink开发过程中遇到的一些坑(持续更新)
以下记录的问题,Flink版本为1.10.0,Kafka版本为0.10.0.1。有些问题至今不知道原因是啥,如果有朋友知道的话,麻烦和我说下呗,感谢感谢!1.setStartFromEarliest不起作用 在IDEA中调试,消费Kafka的数据,然后发现setStartFromEarliest不起作用,Consumer显示默认的offset还是latest。通过Con...原创 2020-05-05 22:14:42 · 5224 阅读 · 6 评论