
Flink
文章平均质量分 82
Blink Flink 是我下半生主要搞得东西了
程序猿进阶
要做就做第一,就算结果不是第一,也会是一个好成绩。 加油!我的未来不是梦。
展开
-
为什么选择 Flink 做实时处理
我们平常开发的Java应用系统时没有状态的。Stom的实现方式。微服务架构将系统拆解成不同的独立服务模块,每个模块分别使用各自独立的数据库,这种模式解决了业务系统拓展的问题,但是也带来了新的问题,那就是业务交易数据过于分散在不同的系统中,很难将数据进行集中化管理,对于企业内部进行数据分析或者数据挖掘之类的应用,则需要通过从不同的数据库中进行数据抽取,将数据从数据库或业务系统中周期性地同步到数据仓库中,然后在数据仓库中进行数据的抽取、转换、加载(ETL),从而构建成不同的数据集市和应用,提供给业务系统使用。原创 2024-03-10 05:00:00 · 5017 阅读 · 100 评论 -
Flink Connector 开发
Flink里预定义了一部分source和sink。在这里分了几类。原创 2024-01-05 09:04:39 · 10833 阅读 · 46 评论 -
Flink 的时间属性及原理解析
Flink的API大体上可以划分为三个层次:处于,这三层中的每一层都非常依赖于时间属性。时间在FlinkAPI。在这一层中因为封装方面的原因,我们能够接触到时间的地方不是很多,所以我们将重点放在底层的和最上层的。原创 2024-01-04 09:03:26 · 11008 阅读 · 52 评论 -
Flink Watermark和时间语义
当事件流流进 Partition 时会判断新事件流的WM是否大于当前的Partition WM,当大于时就更新 Partition 的时间戳WM为新流入的WM(取最大值),如下1->2象限Partition WM的变化。同时,如下 Task 也维护了一个全局的 WM 表示事件时钟,该值取分区中最小的WM 作为输出的时间戳,如下第二象限的输出选择最小的 WM=3 向下传递。解决方案是让窗口等几分钟。Watermark 是一条特殊的数据记录,必须单调递增,以确保任务的事件时间时钟在向前推进,而不是在后退。原创 2024-01-03 09:06:09 · 4061 阅读 · 53 评论 -
Flink 输出至 MySql
【代码】Flink 输出至 MySql。原创 2023-12-30 21:27:56 · 1386 阅读 · 39 评论 -
Flink 输出至 Elasticsearch
Flink 输出至 Elasticsearch。原创 2023-12-29 21:44:15 · 5005 阅读 · 39 评论 -
Flink Kafka[输入/输出] Connector
本章重点介绍生产环境中最常用到的。使用Flink的同学,一定会很熟悉kafka,它是一个分布式的、分区的、多副本的、 支持高吞吐的、发布订阅消息系统。生产环境环境中也经常会跟kafka进行一些数据的交换,比如利用读取数据,然后进行一系列的处理之后,再将结果写出到kafka中。这里会主要分两个部分进行介绍,一是,一个是。原创 2023-12-28 22:20:35 · 3859 阅读 · 41 评论 -
Flink Job 执行流程
模式【1】;生成,然后转化为JobGraph;【2】依次启动三者都服从分布式协同一致的策略;将JobGraph转化为,然后转化为物理执行任务Execution,然后进行deploydeploy过程会向请求slot,如果有直接deploy到对应的的slot里面,没有则向Yarn的申请,带container启动以后deploy。【3】负责接收subTask,并运行。整个任务运行代码调用流程如下图subTask在执行时是怎么运行的?调用StreamTask的invoke【1】即operator的;原创 2023-12-27 22:53:04 · 5633 阅读 · 75 评论 -
Checkpoint 执行机制原理解析
下游的`sink`节点收集齐上游两个`input`的`barrier`之后,会执行本地快照,这里特地展示了`RocksDB incremental`(增量) `Checkpoint`的流程,首先`RocksDB`会全量刷数据到磁盘上(红色大三角表示),然后`Flink`框架会从中选择没有上传的文件进行持久化备份原创 2023-12-26 23:08:36 · 1890 阅读 · 39 评论 -
Flink 输出至 Redis
【代码】Flink 输出至 Redis。原创 2023-12-26 00:02:43 · 3035 阅读 · 33 评论 -
Flink 客户端操作命令及可视化工具
Flink提供了丰富的客户端操作来提交任务和与任务进行交互。下面主要从Flink命令行、SQL Client和Web五个方面进行整理。在Flink安装目录的bin目录下可以看到flink和等文件,这些都是客户端操作的入口。原创 2023-12-24 22:21:45 · 8088 阅读 · 66 评论 -
Flink 数据序列化
大家都应该清楚Task和StreamTask两个概念,Task是直接受TaskManager管理和调度的,而Task又会调用StreamTask,而StreamTask中真正封装了算子的处理逻辑。在run()方法中,首先将反序列化后的数据封装成StreamRecord交给算子处理;然后将处理结果通过Collector发送给下游 ( 在构建Collector时已经确定了SerializtionDelegate),并通过RecordWriter写入器将序列化后的结果写入DataOutput;最后序列化的操作交给原创 2023-12-23 22:36:25 · 3731 阅读 · 36 评论 -
Flink 运行时[Runtime] 整体架构
在分布式系统中,消息的丢失、错乱不可避免,这些问题会在分布式系统的组件中引入不一致状态,如果没有定时消息,那么组件无法从这些不一致状态中恢复。作为分布式数据处理框架,Flink同时提供了支撑流计算和批计算的接口,同时在此基础之上抽象出不同的应用类型的组件库,如基于流处理的。然后,对于后续的任务,当它的前驱任务全部执行完成后,作业的执行过程中,除正常执行的流程外,还有可能由于环境等原因导致各种类型的错误。模式更适合运行执行时间较长的大作业,这些作业对稳定性要求较高,并且对申请资源的时间不敏感。原创 2023-12-22 22:43:08 · 5330 阅读 · 36 评论 -
Flink 状态管理与容错机制(CheckPoint & SavePoint)的关系
例如一个加法算子,第一次输入2+3=5那么以后我多次数据2+3的时候得到的结果都是5。得出的结论就是,相同的输入都会得到相同的结果,与次数无关。访问量的统计,我们都知道Nginx的访问日志一个请求一条日志,基于此我们就可以统计访问量。如下,/api/a这个url第一此访问的时候,返回的结果就是count1,但当第二次访问的时候,返回的结果变成了2。为什么Flink知道之前已经处理过一次,这就是state发挥作用了,这里是被称为存储了之前需要统计的数据,keyby接口的调用会创建对key进行划分,这是使用。原创 2023-12-21 23:12:41 · 3076 阅读 · 42 评论 -
Flink Table API 与 SQL 编程整理
都是从中scan出来的。而这个myTable又是我们注册进去的。问题就是有哪些方式可以注册Table。类似于上述的WordCount,指定一个文件系统fs,也可以是kafka等,还需要一些格式和Schema等。//将source注册到env中然后把自己的注册进去。例如下面一个String类型的DataStream,命名为myTable3对应的schema只有一列叫word。原创 2023-12-20 22:48:27 · 3755 阅读 · 39 评论 -
Flink 数据类型 & TypeInformation信息
除了使用已有的所定义的数据格式类型之外,用户也可以自定义实现,来满足的不同的数据类型定义需求。Flink提供了可插拔的让用户将自定义的注册到Flink类型系统中。如下代码所示只需要通过实现接口,返回相应的类型信息。通过@TypeInfo注解创建数据类型,定义数据类型。然后定义类继承于,参数类型指定。最后重写方法,创建的就是数据类型。@Override。原创 2023-12-18 20:10:59 · 5291 阅读 · 55 评论 -
Flink 数据集类型
现实世界中,所有的数据都是以流式的形态产生的,不管是哪里产生的数据,在产生的过程中都是一条条地生成,最后经过了存储和转换处理,形成了各种类型的数据集。如下图所示,根据现实的数据产生方式和数据产生是否含有边界(具有起始点和终止点)角度,将数据分为两种类型的数据集,一种是有界数据集,另外一种是无界数据集。原创 2023-12-15 22:44:02 · 3213 阅读 · 50 评论 -
Flink 流处理流程 API详解
中不同类型的流在处理的时候对应不同的 process 方法,他们都位于同一个 function中,会存在一些共享的数据信息。这个引擎对类型信息知道的越多,就可以对数据进行更充足的优化,序列化与反序列化就会越快。进行横向切分,把数据流中不同类别任务输入到不同的算子中进行处理,不同的算子之间是并行的操作。【6】我们可以对流按照时间或者个数进行一些切分,可以理解为将无线的流分成一个一个的单位流,怎么切分根据用户自定的逻辑决定的。会根据查询运行的方式返回不同的运行环境,是最常用的一种创建执行环境的方式。原创 2023-12-14 23:19:59 · 2587 阅读 · 33 评论 -
Flink 有状态流式处理
做法就是没处理完一笔,更改完状态之后,就做一次快照(包含它处理的数据在队列中的位置和它处理到的位置以及当时的状态进行对比)【1】如下图,当我们从数据源获取数据的时候,其实我们已经开始有状态了,这个时候我们可以把任务处理的整个过程抽象成如下图中的一张表。我们要处理一个持续维护的状态时,最适合的方式就是状态流处理(累积状态和维护状态+时间,是不是该收的结果都收到了)数据也没有物理边界。是不同的,相同的任务在不同的算子里面它是相同的。处理新的数据都是事件发生时的数据,这个时候再跟程序执行的时间比较就更能体现。原创 2023-12-12 23:25:58 · 2617 阅读 · 33 评论 -
编译 Flink代码
中,如有问题百度解决,百度没有,多试几次,可能是网络的问题。镜像仓库或者自己搭建的仓库。最重要的是第二个片段的内容。另一种编译命令,相对于上面这个命令,主要的确保是:不编译。当成功编译完成后,上述几种编译方式最终都能在当前。另外,在一些情况下,我们可能并不想把编译后的。查看 Git远程分支,我们选择当前次新的。要构建单元测试,请使用。,但是不能正确地遮盖某些依赖项。的访问,你也可以配置成国内其他的。常用命令,建议使用此命令,不编译。比较慢,而 且所依赖的。,并执行如下命令进行安装。原创 2023-12-11 23:05:24 · 2774 阅读 · 30 评论 -
Flink 本地单机/Standalone集群/YARN模式集群搭建
集群,任务之间相互独立,互不影响,方便管理。任务执行完成之后创建的集群也会消失。现在,您的 Flink系统已启动并正在运行。现在,在本地节点上运行的。分离模式(与当前客户端无关,当客户端提交完任务就结束,不用等到。提供集群中所有节点的列表,这些列表将用作工作节点。,添加该配置表示内存超过分配值,是否将任务杀掉。集群,开辟指定的资源,以后提交任务都向这里提交,这个。文件中列出的所有辅助节点,以在每个节点上启动。得到结果,这里统计的是默认的数据集,可以通过。页面看看,如果没有修改配置中的端口,默认是。原创 2023-12-09 23:37:41 · 2537 阅读 · 21 评论 -
Flink 使用场景
数据分析任务需要从原始数据中提取有价值的信息和指标。传统的分析方式通常是利用批查询,或将事件记录下来并基于此有限数据集构建应用来完成。为了得到最新数据的分析结果,必须先将它们加入分析数据集并重新执行查询或运行应用,随后将结果写入存储系统或生成报告。借助一些先进的流处理引擎,还可以实时地进行数据分析。和传统模式下读取有限数据集不同,流式查询或应用会接入实时事件流,并随着事件消费持续产生和更新结果。这些结果数据可能会写入外部数据库系统或以内部状态的形式维护。原创 2023-12-08 23:25:22 · 2299 阅读 · 32 评论 -
创建第一个 Flink 项目
Flink执行环境主要分为本地环境和集群环境,本地环境主要为了方便用户编写和调试代码使用,而集群环境则被用于正式环境中,可以借助k8s或Mesos等不同的资源管理器部署自己的应用。环境依赖:【1】JDKFlink核心模块均使用 Java开发,所以运行环境需要依赖JDKJDK版本需要保证在1.8以上。【2】MavenFlink的源代码目前仅支持通过 Maven进行编译,所以如果需要对源代码进行编译,或通过IDE开发,则建议使用Maven作为项目工程编译方式。需要注意的是,Flink程序需要。原创 2023-12-07 22:49:04 · 3259 阅读 · 41 评论