flink
文章平均质量分 81
但行益事莫问前程
大数据研发, 开发flink实时流
展开
-
flink 设置空闲等待推进水位线,避免子任务上游最小的水位线迟迟未达到触发时间
此时,如果有其中一个子任务没有数据,导致当前Task的水位线无法推进,窗口无法触发,需要等待上游最小的水位线达到触发时间。于是,flink添加了。多并行度的flink作业,watermark水位线的传递遵循。checkIfIdle()方法用于判断是否触发水位线推进。在设置WatermarkStrategy时,添加。原创 2024-03-03 12:16:03 · 481 阅读 · 0 评论 -
flink 报错ByteArraySerializer is not an instance of org.apache.kafka.common.serialization.Serializer
存在依赖冲突,把conf目录下flink-conf.yml中的classloader.resolve-order参数由默认的child-first改成parent-first。代码逻辑为从socket流中读取数据写入kafka。查看flink作业日志。提交到yarn集群后报错。原创 2024-03-02 19:48:05 · 759 阅读 · 0 评论 -
生产环境下,应用模式部署flink任务,通过hdfs提交
通过通过yarn.provided.lib.dirs配置选项指定位置,将flink的依赖上传到hdfs文件管理系统。原创 2024-02-19 21:03:24 · 627 阅读 · 0 评论 -
flink 从savepoint、checkpoint中恢复数据
flink作业因为故障导致restart strategy失败或升级flink版本重新发布任务,这时就需要从最近的checkpoint恢复。一般而言有两种方案,第一种方案是开启checkpoint且任务取消时不删除checkpoint(调整参数execution.checkpointing.externalized-checkpoint-retention),第二种方案是定时触发savepoint(编写代码调用flink rest api)。原创 2023-04-01 10:58:22 · 2534 阅读 · 1 评论 -
flink GROUPING SETS多维度聚合、设置Table state 到期时间
在一个GROUP BY 查询中,根据不同的维度组合进行聚合。GROUPING SETS就是一种将多个GROUP BY逻辑UNION在一起。GROUPING SETS会把在单个GROUP BY逻辑中没有参与GROUP BY的那一列置为NULL值。空分组集意味着所有行都聚合到一个组中代码实例: 在持续查询的过程中,由于用于分组的 key 可能会不断增加,因此计算结果所需要维护的状态也会持续增长。为了防止状态无限增长耗尽资源,Flink Table API 和 SQL 可以在表环境中配置状态的生存时间(原创 2022-06-09 16:58:02 · 51375 阅读 · 0 评论 -
flink 窗口表值函数
从 1.13 版本开始,Flink 开始使用窗口表值函数(Windowing table-valued functions,Windowing TVFs)来定义窗口。窗口表值函数是 Flink 定义的多态表函数(PTF),可以将表进行扩展后返回 在窗口 TVF 的返回值中,除去原始表中的所有列,还增加了用来描述窗口的额外 3 个列:(window_start)、(window_end)、(window_time)。窗口时间指的是窗口中的时间属性,它的值等于,所以相当于是窗口中包含数据的最大时间戳 在原创 2022-06-08 17:08:55 · 50379 阅读 · 0 评论 -
flink 容错机制(检查点的保存、恢复、检查点算法、保存点、状态一致性的三种级别、end-to-end exactly-once)
flink将之前某个时间点所有的状态保存下来,这份就是所谓的检查点(checkpoint)。检查点是 Flink 容错机制的核心。检查是针对故障恢复的结果而言的:故障恢复之后继续处理的结果,应该与发生故障前完全一致。所以有时又会把 checkpoint 叫作 检查点作为应用状态的一份存档,其实就是(snapshot),它的触发是周期性的。每隔一段时间检查点保存操作被触发时,就把每个任务当前的状态复制一份,按照一定的逻辑结构放在一起持久化保存起来,就构成了检查点 当的时候,将它们的状态保存下来。首先,原创 2022-06-08 00:05:25 · 71045 阅读 · 0 评论 -
flink 状态编程(有状态算子、 算子状态(Operator State)、按键分区状态(Keyed State)、状态持久化、状态后端)
无状态的算子任务只需要观察每个独立事件,根据当前输入的数据直接转换输出结果 有状态的算子任务,除当前数据外,还需要一些其他数据来得到计算结果。 最常见的状态(state),就是之前到达的数据,或者由之前数据计算出的某个结果如: sum计算时,需要保存之前所有数据的和;窗口算子中会保存已经到达的所有数据;检索先有下单行为,后有支付行为的事件模式(event pattern),也应该把之前的行为保存下来 Flink 将状态直接保存在内存中来保证性能,并通过分布式扩展来提高吞吐量。Flink原创 2022-06-05 21:49:28 · 52701 阅读 · 1 评论 -
flink Window Join、Interval Join、Window CoGroup (两流匹配 指定key联结,开窗口进行窗口操作)
Flink 提供了一个窗口联结(window join)算子,可以定义时间窗口,并将两条流中共享一个公共键(key)的数据放在窗口中进行配对处理 窗口联结在代码中的实现,首先需要调用 DataStream 的.join()方法来合并两条流,得到一个 JoinedStreams;接着通过.where()和.equalTo()方法指定两条流中联结的 key;然后通过.window()开窗口,并调用.apply()传入联结窗口函数进行处理计算 .where()的参数是键选择器(KeySelector),原创 2022-06-05 14:22:23 · 70129 阅读 · 0 评论 -
flink 多流转换(侧输出流分流、Union、Connect) 实时对账app 的支付操作和第三方的支付操作的双流 Join
将一条数据流拆分成完全独立的两条、甚至多条流,直接用处理函数(process function)的侧输出流(side output)即可2. 合流2.1 联合(Union) 联合操作要求必须,合并之后的新流会包括所有流中的元素,数据类型不变注意: 对于合流之后的水位线,,才可以保证所有流都不会再传来水位线之前的数据 在合流之后的 ProcessFunction 对应的算子任务中,逻辑时钟的初始状态: 由于 Flink 会在流的开始处,插入一个负无穷大(Long.MIN_VA原创 2022-06-05 13:25:10 · 69853 阅读 · 0 评论 -
flink 控制窗口行为(触发器、移除器、允许延迟、将迟到的数据放入侧输出流)
触发器主要是用来控制窗口什么时候触发计算,执行窗口函数。基于 WindowedStream 用.trigger()方法,就可以传入一个自定义的窗口触发器(Trigger)。 Trigger 是窗口算子的内部属性,每个窗口分配器(WindowAssigner)都会对应一个默认的触发器;对于 Flink 内置的窗口类型,它们的触发器都已经做了实现。如:所有事件时间窗口,默认的触发器都是 ;源码:实际场景:每个 url 在 10 秒滚动窗口的 pv 指标,然后设置了触发器,每隔 5 秒钟触发一次窗口的计原创 2022-06-03 23:09:52 · 69955 阅读 · 0 评论 -
flink 滚动窗口、滑动窗口、会话窗口、全局窗口
根据分配数据的规则,窗口的具体实现可以分为 4 类:滚动窗口(Tumbling Window)、滑动窗口(Sliding Window)、会话窗口(Session Window),以及全局窗口(Global Window) 滚动窗口有固定的大小,是一种的划分方式。窗口之间没有重叠,也不会有间隔,是“首尾相接”的状态。滚动窗口可以基于时间定义,也可以基于数据个数定义;需要的参数只有一个,就是窗口的大小(window size)。 与滚动窗口类似,滑动窗口的大小也是固定的。区别在于,窗口之间并不是首尾原创 2022-06-03 17:07:30 · 77042 阅读 · 1 评论 -
flink 时间语义、水位线(Watermark)、生成水位线、水位线的传递
在flink中,当希望对数据按照时间窗口来进行收集计算时,时间的衡量标准就非常重要 如图:在事件发生之后,生成的数据被收集起来,首先进入分布式消息队列,然后被 Flink 系统中的 Source 算子读取消费,进而向下游的转换算子(窗口算子)传递,最终由窗口算子进行计算处理。 在这个过程中,有两个非常重要的时间点:一个是数据产生的时间,把它叫作(Event Time);另一个是数据真正被处理的时刻,叫作(Processing Time);窗口操作以那种时间作为衡量标准,就是所谓的(Notion原创 2022-06-03 16:20:29 · 71889 阅读 · 0 评论 -
flink keyby、shuffle、 rebalance、rescale、 broadcast、global、自定义分区算子以及各分区器源码
Flink中keyBy是一种按照键的哈希值来进行重新分区的操作,至于分区是否均匀、每个key 的数据具体会分到哪一区无法控制,因此keyBy 是一种逻辑分区(logical partitioning)操作。只有(physical partitioning),才真正控制分区策略精准地调配数据。 物理分区与 keyBy 另一大区别在于,keyBy 之后得到的是一个 KeyedStream,而物理分区之后结果仍是 DataStream,且流中元素数据类型保持不变。分区算子并不对数据进行转换处理,只是定义原创 2022-06-02 21:56:22 · 23035 阅读 · 0 评论 -
Flink 支持的数据类型、从kafka读取自定义POJO类型的数据流
Flink 作为一个分布式处理框架,处理的是以数据对象作为元素的流。要分布式地处理这些数据,就不可避免地要面对数据的网络传输、状态的落盘和故障恢复等问题,这就需要对数据进行序列化和反序列化。 Flink 有自己一整套类型系统。Flink 使用“类型信息”(TypeInformation)来统一表示数据类型。TypeInformation 类是 Flink 中所有类型描述符的基类。它涵盖了类型的一些基本属性,并为每个数据类型生成特定的序列化器、反序列化器和比较器(1)基本类型 所有 Java 基本原创 2022-06-02 16:35:34 · 51571 阅读 · 0 评论 -
flink Could not find a file system implementation for scheme hdfs
问题:原因:flink自1.8之后不再提供对应的hadoop编译版本,需要用户自己重新编译或者提供一个flink和hadoop连接器。解决:原创 2022-06-02 13:11:25 · 51105 阅读 · 3 评论 -
flink 数据流图、并行度、算子链、JobGraph与ExecutionGraph、任务和任务槽
所有的 Flink 程序都可以归纳为由三部分构成:Source、Transformation 和 Sink 在运行时,Flink 程序会被映射成所有算子按照逻辑顺序连接在一起的一张图,这被称为(logical dataflow),或者叫(dataflow graph) 数据流图类似于有向无环图(DAG),每一条数据流(dataflow)以一个或多个 source 算子开始,以一个或多个 sink 算子结束。 除了 Source 读取数据和 Sink 输出数据,一个中间的转换算子(Transf原创 2022-06-02 11:42:56 · 21727 阅读 · 0 评论 -
flink 部署模式和运行时架构(会话模式、单作业模式、应用模式,JobManager、TaskManager,YARN 模式部署以及运行时架构)
会话模式,需要先启动一个集群,保持一个会话,在这个会话中通过客户端提交作业。集群启动时所有资源就已经确定,所以所有提交的作业会竞争集群中的资源。 集群的生命周期是超越于作业之上的,作业结束了就释放资源,集群依然正常运行。当然:因为资源是共享的,所以资源不够了,提交新的作业就会失败。另外,同一个 TaskManager 上可能运行了很多作业,如果其中一个发生故障导致 TaskManager 宕机,那么所有作业都会受到影响 会话模式 单作业模式是严格的一对一,集群只为这个作业而生。由客户端运行应原创 2022-06-01 16:35:04 · 71882 阅读 · 2 评论 -
flink Spark 和 Flink对比
文章目录前言1. 数据处理架构2. 数据模型和运行架构3. Spark 还是 Flink?前言 Apache Spark 是一个通用大规模数据分析引擎。它提出的内存计算概念让大家得以从 Hadoop 繁重的 MapReduce 程序中解脱出来。除了计算速度快、可扩展性强,Spark 还为批处理(Spark SQL)、流处理(Spark Streaming)、机器学习(Spark MLlib)、图计算(Spark GraphX)提供了统一的分布式数据处理平台,整个生态经过多年的蓬勃发展已经非常完善。原创 2022-05-31 17:05:35 · 51716 阅读 · 0 评论 -
flink 应用场景(实时处理dataflow)
文章目录前言1. 电商和市场营销2. 物联网(IOT)3. 物流配送和服务业4. 银行和金融业前言 Flink 的定位是一个大数据流式处理引擎,处理流式数据(Data Flow)。数据并不是收集好的,而是像水流一样,是一组有序的数据序列,逐个到来、逐个处理。由于数据来到之后就会被即刻处理,具有良好的实时性。Flink 适合的场景,就是需要实时处理数据流的场景1. 电商和市场营销举例:实时数据报表、广告投放、实时推荐 在电商行业中,网站点击量是统计 PV(页面访问量,即PageView)、U原创 2022-05-31 11:40:50 · 53441 阅读 · 0 评论 -
flink 处理迟到数据(Trigger、设置水位线延迟时间、允许窗口处理迟到数据、将迟到数据放入侧输出流、代码示例、迟到数据触发窗口计算重复结果处理)
文章目录前言1.Trigger2.处理迟到数据2.1 设置水位线延迟时间2.2 允许窗口处理迟到数据2.3 将迟到数据放入侧输出流3.实操3.1 代码示例3.2 中间遇到的异常3.3 结果演示4. 迟到数据触发窗口计算重复结果处理前言 迟到数据,是指在watermark之后到来的数据,事件时间在水位线之前。所以只有在事件时间语义下,讨论迟到数据的处理才有意义。对于乱序流,可以设置一个延迟时间;对于窗口计算,可以设置窗口的允许延迟时间;另外可以将迟到数据输出到Side Outputs1.Trigg原创 2022-05-22 13:07:40 · 71827 阅读 · 0 评论 -
flink kafka写入jdbc数据库mysql,JdbcSink源码
1. 概述 关系型数据库是企业中业务数据存储的主要形式。MySQL 就是典型代表,尽管在大数据处理中直接与 MySQL 交互的场景不多,但最终处理的计算结果是要给外部应用消费使用的,而外部应用读取的数据存储往往就是 MySQL2. 使用2.1 添加依赖(注意引入的驱动版本) <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connect原创 2022-05-21 09:38:50 · 51500 阅读 · 0 评论 -
Flink sink算子,kafka数据写入redis
1. 概述 Redis 提供了string、hash、list、set、sorted set、bitmap等一系列常用的数据结构。Flink 没有直接提供官方的 Redis 连接器,但 Bahir 项目提供了 Flink-Redis 的连接工具2. 使用2.1 引入依赖 服务器上的flink版本与引入的依赖之间有冲突,使用exclusions排除 <dependency> <groupId>org.apache.bahir</groupId原创 2022-05-20 17:30:22 · 21040 阅读 · 0 评论 -
Flink 特性
文章目录一.简介1.什么是Flink2.特点3.对比4.流处理、批处理5.架构体系一.简介1.什么是FlinkApache Flink是分布式大数据处理引擎,可对有限数据流和无限数据流进行状态计算,可部署在各种集群环境下,对各种大小的数据进行快速计算.flink 官网2.特点批流统一(支持批计算和流计算);支持高吞吐、低延迟、高性能的流处理;支持带有事件时间窗口操作;支持有状态...原创 2020-04-23 00:10:16 · 50942 阅读 · 0 评论 -
flink java提交任务,根据jobname获取jobid,rest获取任务的状态
1.传入jobname:public class ReduceDemo { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStreamSource<String> words = env.socketT原创 2020-08-03 17:27:54 · 80689 阅读 · 0 评论 -
读取二进制文件(后缀.bin),解析二进制文件,并入库
1.场景提供了一个接近1G的二进制文件,内容为振动数据(包含头数据 、有效数据、尾数据),要求解析入库2.思路运行在flink上,从文件中增量抽数据,flatmap处理,最后sink到redis中public class SourceFromFile extends RichSourceFunction<byte[]> { private volatile Boolean isRunning = true; @Override public void run(S原创 2020-08-13 17:39:13 · 52764 阅读 · 0 评论 -
flink 从kafka读取数据写入mysql数据库
搭建flink,版本flink-1.9.2搭建kafka,版本kafka_2.11-2.0.0pom文件根据自己的版本自定义pom文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www...原创 2020-04-24 17:52:29 · 53464 阅读 · 2 评论 -
flink StreamingFileSink 读取kafka中的数据,流式地写入本地文件系统
1. StreamingFileSink Flink 存在一些简单粗暴的输出到文件的预实现方法:如 writeAsText()、writeAsCsv() 直接将输出结果保存到文本文件或 Csv 文件。但这种方式是不支持同时写入一份文件,Sink 操作并行度只能为 1,拖慢系统效率且无法保证故障恢复后的状态一致性 对此,Flink 专门提供了一个流式文件系统的连接器:StreamingFileSink,它继承自抽象类RichSinkFunction,而且集成了 Flink 的检查点(checkpoi原创 2022-05-20 09:23:11 · 51782 阅读 · 0 评论 -
flink 命令行提交jar时,传入自定义的参数或配置文件,任务运行时获取参数
Flink提供ParameterTool类,从不同的来源读取参数;1.fromArgs() 即可读取在命令行中传递的参数,注意传参 格式为 key value ,key必须以 - 或者 – 开头2.fromPropertiesFile若传递的参数多,可以在命令行中使用fromArgs传递 PropertiesFile 的文件路径,然后再运用此方法读取配置文件中的参数。3.DEMOpublic class Demo { public static void main(String[.原创 2020-09-30 10:31:33 · 82019 阅读 · 3 评论