Java Flink
小菜菜1223
qq846792646
展开
-
java Flink(四十三)Flink Interval Join源码解析以及简单实例
之前我们在一片文章里简单介绍过Flink的多流合并算子今天我们通过Flink 1.14的源码对Flink的进行深入的理解。不是两个窗口做关联,更适用于处理乱序数据流之间的关联。它的作用更类似于从左流中a元素本身出发,对右流中一段时间内的数据进行关联(Inner Join:只关联相同Key的数据)。如图所示:下边这条流中的2关联到上范围内的0/1。原创 2024-03-19 15:54:25 · 807 阅读 · 0 评论 -
java Flink(四十二)Flink的序列化以及TypeInformation介绍(源码分析)
主要作用是为了在 Flink系统内有效地对数据结构类型进行管理,能够在分布式计算过程中对数据的类型进行管理和推断。同时基于对数据的类型信息管理,Flink内部对数据存储也进行了相应的性能优化。每一个具体的数据类型都对应一个TypeInformation的具体实现,每一个TypeInformation都会为对应的具体数据类型提供一个专属的序列化器。原创 2024-03-18 19:51:25 · 984 阅读 · 0 评论 -
java Flink(四十一)Flink+avro+广播流broadcast实现流量的清洗
Data。原创 2024-02-29 20:40:29 · 575 阅读 · 0 评论 -
java Flink(四十)FlinkSql 简单Demo以及具体使用
之前FlinkSql用的比较少,今天开始简单介绍一下。首先导入依赖:<!-- 引入flink table相关依赖--><dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-table-planner_2.12</artifactId> <version>1.10.1</version>原创 2021-07-29 10:53:16 · 4008 阅读 · 0 评论 -
java Flink(三十九)官方基础篇-算子概括(基础)
今天回顾一下Flink官方对内部提供的算子的一个介绍。算子:Map 转换流:DataStream → DataStream 简单说明:取一个元素并产生一个元素。将输入流的值加倍的映射函数(必须产生数据) 使用方式:DataStream<Integer> dataStream = //...dataStream.map(new MapFunction<Integer, Integer>() { @Override public I...原创 2021-07-23 16:51:20 · 477 阅读 · 1 评论 -
java Flink(三十八)用户自定义Functions-累加器
自定义Functions官方介绍就是除了我们自定义实现Flink提供的各种算子外,还提供了累加器等。 实现比较简单,就是简单的上下文注册以及使用。 代码: import org.apache.flink.api.common.accumulators.IntCounter;import org.apache.flink.api.common.functions.RichFlatMapFunction;import org.apache.flink.configuratio...原创 2021-07-23 16:12:31 · 322 阅读 · 0 评论 -
java Flink(三十七)Flink底层ProcessFunction的常见ProcessFunction总结以及简单使用
在flink中,转换算子是无法访问事件的时间戳信息和水位线信息的。所以! flink提供了一些列的Low-Level转换算法,他们可以访问时间戳,watermark以及注册定时器。总结:ProcessFunction可以被认为是一种提供了对状态和定时器访问的FlatMapFunction,没接收到一个数据流都会进行处理,可以通过访问时间戳来进行设置定时器等操作。 flink提供了8个ProcessFunction: ProcessFunction dataStrea...原创 2021-07-23 14:20:17 · 1233 阅读 · 1 评论 -
java Flink(三十六)Flink多流合并算子UNION、CONNECT、CoGroup、Join
UNION介绍 DataStream.union()方法将两条或者多条DataStream合并成一条具有与输入流相同类型的输出DataStream.事件合流的方式为FIFO方式。操作符并不会产生一个特定顺序的事件流。union操作符也不会进行去重。每一个输入事件都被发送到了下一个操作符。说明:1.union 合并的流的元素必须是相同的2.union 可以合并多条流3.union不去重,合流顺序为先进先出具体用法:DataStream<Sensor...原创 2021-07-22 13:59:07 · 5761 阅读 · 0 评论 -
java Flink(三十五)Flink的watermark设置以及部分实现类
watermark(水位线)是Flink里边的相当重要的存在,是Flink处理乱序数据的重要组成。Flink理论上定义了三种watermark广播机制(【2种生成水印的策略】【如果生成的watermark是null,或者小于之前的watermark,则该watermark不会发往下游】)。首先看看它的组成:AssignerWithPunctuatedWatermarks(为每条消息都会尝试生成水印)AssignerWithPeriodicWatermarks(周期性的生成水印,不会针对.原创 2021-07-22 10:05:09 · 882 阅读 · 0 评论 -
java Flink(三十四)Flink ReducingState简单使用
直接上代码:import org.apache.flink.api.common.functions.ReduceFunction;import org.apache.flink.api.common.functions.RichFlatMapFunction;import org.apache.flink.api.common.state.ReducingState;import org.apache.flink.api.common.state.ReducingStateDescriptor原创 2021-07-20 11:37:44 · 386 阅读 · 0 评论 -
java Flink(三十三)Flink的广播流状态实例
实例介绍:广播状态在双流的应用,其中一个流当做另一个流的状态。DEMO:import org.apache.flink.api.common.state.MapStateDescriptor;import org.apache.flink.api.common.typeinfo.BasicTypeInfo;import org.apache.flink.configuration.Configuration;import org.apache.flink.streaming.api.da原创 2021-07-20 10:57:01 · 1122 阅读 · 0 评论 -
java Flink(三十二)Flink的异步IO访问外部数据
Flink的异步官方的介绍:当我们使用 Flink 在与外部系统进行交互时(例如:使用存储在数据库中的数据来丰富流事件),这时便需要注意Flink系统与外部系统的通信延迟了。我们使用 MapFunction() 的方式与外部数据库交互,使用的同步交互的方式。即:将请求发送到数据库,并MapFunction等待直到收到响应。在许多情况下,这种等待占据了功能的绝大部分时间。与数据库的异步交互,意味着单个并行函数实例可以同时处理许多请求并同时接收响应。这样,等待...原创 2021-07-19 15:32:08 · 1115 阅读 · 2 评论 -
java Flink(三十一)Flink分布式缓存
什么是Flink的分布式缓存? Flink提供了一个分布式缓存,类似于hadoop,可以使用户在并行函数中很方便的读取本地文件,并把它放在taskmanager节点中,防止task重复拉取。 此缓存的工作机制如下:程序注册一个文件或者目录(本地或者远程文件系统,例如hdfs或者s3),通过ExecutionEnvironment注册缓存文件并为它起一个名称。 当程序执行,Flink自动将文件或者目录复制到所有taskmanager节点的本地文件系统,仅会执行一次。用户可以通过这个指定的名称查找文..原创 2021-07-19 11:10:13 · 248 阅读 · 0 评论 -
java groovy + spock 单元测试实例 powermock mock静态方法 以及Flink单元测试实例
具体的介绍看这篇介绍的很全面。https://blog.csdn.net/u012129558/article/details/78677357powermock mock静态方法实例1、pom依赖引入引入spock、groovy、powermock 相关依赖以及maven插件 <!-- 代码检查使用的依赖 --> <dependency> <groupId>org.apache.maven.p.原创 2021-06-28 16:41:04 · 1550 阅读 · 2 评论 -
java Flink(三十) 面试问题合集
https://blog.csdn.net/wypblog/article/details/103900577https://zhuanlan.zhihu.com/p/138101642原创 2021-05-24 10:59:39 · 126 阅读 · 0 评论 -
java Flink(二十九)Flink 总结 什么是Flink、Flink的主要特点、Flink 运行架构 运行时组件、Flink任务流程、什么是状态一致性(精确一次) 等
一、什么是FlinkFlink 是为分布式、高性能、随时可用以及准确 的流处理应用程序打造的开源流处理框架。Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有 状态计算。Flink 被设计在所有常见的集群环境中运行,以内存执行速度和任意规模 来执行计算。二、为什么选择Flink1、流数据更真实地反映了我们的生活方式2、低延迟 ➢ 高吞吐 ➢ 结果的准确性和良好的容错性3、支持事件时间(event-time)和处理时间(processing-time) 语义4.原创 2021-05-21 17:48:41 · 1110 阅读 · 1 评论 -
java Flink(二十八)Flink实战之电商订单流与到账流数据匹配 使用:connect对两条数据流进行连接、intervalJoin对两条数据流数据区间进行连接
题目:我们要将收到的订单流与到账流进行数据匹配。1、目录结构2、到账流数据内容3、到账流包装类package Beans;public class ReceiveEvent { private String txId; private String payChannel; private Long timetemp; public ReceiveEvent() { } public ReceiveEvent(String原创 2021-05-21 16:57:17 · 545 阅读 · 0 评论 -
java flink(二十七) 实战之电商 订单超时取消报警计算 CEP与ProcessFunction 对比
题目:根据订单文件,读取订单状态:创建-支付-取消,如果15分钟未支付,输出该订单报警。1、首先利用CEP实现目录结构:文件内容:文件内容转换成pojo包装类:package Beans;public class OrderEvent { private Long orderId; private String eventType; private String txId; private Long timestamp; publ.原创 2021-05-21 15:06:36 · 731 阅读 · 1 评论 -
java flink(二十六) 实战之电商黑名单过滤 Flink CEP编程实现、什么是CEP、CEP组合模式demo、CEP循环模式demo
什么是CEP:1、复杂事件处理2、Flink中实现复杂事件处理库3、CEP允许在无休止的事件中检测事件模式,让我们有机会掌握数据中的重要部分4、一个或多个由简单事件构成的事件通过一定的规则匹配,然后输出用户想要的数据。CEP API:begin 第一个事件定义where 条件next 后一个紧跟着事件定义subtype 子类型判断followedBy 后边的时间 不一定紧跟着CEP 个体模式:CEP 模式序列CEP 超时处理...原创 2021-05-21 11:04:04 · 653 阅读 · 0 评论 -
java flink(二十五) 实战之电商黑名单过滤 使用:控制定时器触发、删除。实现:1、根据时间触发定时器 2、根据事件触发定时器
题目:1、我们获取访问日志,如果2s内连续登录失败超过两次的用户进行报警2、解决时效性 连续失败等于两次就报警1、目录结构:2、日志内容:3、接收数据包装类package Beans;public class LoginEvent { private Long userId; private String ip; private String loginState; private Long timestamp; public原创 2021-05-21 10:01:04 · 329 阅读 · 0 评论 -
java flink(二十四) 实战之电商广告点击黑名单过滤 使用:process自定义过滤器、侧输出流报警、最终统计数据之前拦截数据、双状态、定时器、双key分组
实际场景中有这么一种情况,我们需要在数据进入窗口统计之前进行一次过滤,但是数据不是单纯的被过滤掉,而是另有用途或者是数据只需要部分,多余的会产生报警信息。所以不能单纯的使用filter进行数据过滤。场景:读取广告点击记录,统计根据城市统计各个城市点击量。另外需要根据用户id统计,如果用户点击单个广告超过100次(一天之内,超过一天重新计算)则进行报警,输出到测输出流,并且超过100次的数据不进入城市统计。1、目录结构2、pojo代码 首先是将接收到的数据转换成pojo类型packa原创 2021-05-20 14:50:24 · 554 阅读 · 0 评论 -
java Flink(二十三)Flink实战之模拟市场营销,用户动作统计。使用:自定义模拟数据源、组合开窗、增量聚合、滑动窗口
这篇主要介绍怎么自定义模拟数据源,还有组合开窗的使用。1、目录结构:2、pojo包装类package Bean;public class MarketingUserBehavior { private Long userId; private String behavior; private String channel; private Long timestamp; public MarketingUserBehavior() {原创 2021-05-19 20:16:16 · 239 阅读 · 0 评论 -
java Flink(二十二)Flink实战之电商用户访问量(uv独立访客数)统计 使用:利用set进行数据去重、自定义布隆过滤器,解决状态数据过大、内存过大的问题、使用trigger自定义窗口触发器
某些情况下,我们开窗统某些数量,需要根据主键进行去重操作,这里我们可以利用set集合进行去重操作但是如果窗口中set里面的数据过多,则会占用大量的内存。于是在这种场景下,我们可以选择将数据保存到redis,使用一个布隆过滤器,高效又能降低内存使用。布隆过滤器的基本原理就是将主键进行hash计算,将计算的值在redis里保存的位图的相关位置置1,如果再来数据可以检测相关位置是否是1,如果是1说明已经有该数据。我们实战一个电商统计每小时内访问量(独立访客数)1、目录结构:2、pojo原创 2021-05-19 19:25:25 · 795 阅读 · 5 评论 -
java Flink(二十一)Flink实战之电商用户访问量统计,统计某个时间段内的访问总量,设计随机key解决数据倾斜问题,解决并行度只是用一个问题。
1、在实际项目中,如果只单纯的统计数量,但是要进行开窗操作,开窗之前是需要keyBy操作的,因为我们需要统计所有数量,所以keyBy没有意义。所以我们可以设计Tuple将keyBy 的key统一为固定一个。2、如此操作 所有key固定,并行度是根据key的hashcode取模之后进行重分区,这样key固定 并行度就没有意义。题目:开窗统计一个小时的窗口内总的访问数量,解决数据倾斜问题,使并行度设计更加合理。1、首先项目结构2、文件内容3、pojo类设计package原创 2021-05-18 11:32:57 · 2255 阅读 · 1 评论 -
java flink(二十) 实战之电商页面统计热门二(apache log)访问地址 使用:详细理解flink延迟处理机制、使用flink侧输出流、flink双计时器使用。数据排序
基于上文我们本文来具体理解flink的延迟处理机制以及侧输出流使用,如何注册使用两个计时器等。1、首先理解flink窗口的范围,flink如何设置每个窗口的范围根据flink底层代码,我们可以看到flink的初始窗口的范围选择是根据窗口大小选择最近的整数倍的窗口。举个例子:比如我们的窗口大小是10s第一条进来的数据事件时间是 16000000009那么flink设置的第一个窗口范围就是[16000000000,16000000010) 前闭后开2、理解watermark的使...原创 2021-05-14 15:01:30 · 474 阅读 · 0 评论 -
java flink(十九) 实战之电商页面统计热门(apache log)访问地址 使用:map、filter、aggregate、process、定时器、状态
实战二说明:看视频学习之二,继续根据实战一往后进行学习1、首先新建模块 目录结构:同样我们模块内的pom不需要进行修改 利用主pom即可2、数据源(这里数据源使用文件读取,展示部分内容)3、代码展示首先是pojo类里边的接收类,把接收到的数据转成对象package Bean;public class ApachLogEvent { private String ip; private String userId; private Long .原创 2021-05-13 17:04:23 · 453 阅读 · 3 评论 -
java flink获取数组中的最大值以及索引、数组中的最小值以及索引并返回元组类型、计算数组的和
import org.apache.flink.api.java.tuple.Tuple2;//获取数组最大值以及最大值索引 public static Tuple2<Double, Integer> getListMaxValue(List<Double> list) { double maxValue = list.get(0); int index = 0; for (int i = 0; i < list.s.原创 2021-05-11 15:13:47 · 694 阅读 · 0 评论 -
java Flink(十八)flink 1.10从程序打包到flink安装、服务部署 包含kafka、检查点使用、状态保存、故障状态恢复checkpoint等
一、检查服务器运行环境*(重要)运行 vim /etc/profile查看当前服务器的运行环境 jdk需要大于1.8以上版本(如果没有需要安装jdk)hadoop版本2.7.5scala版本2.11二、flink下载下载我们需要的flink版本https://archive.apache.org/dist/flink/我们scala是2.11下载之后 tar zxvf flink-1.10.0-bin-scala_2.11.tgz进行解压修改con...原创 2021-05-11 14:39:10 · 741 阅读 · 0 评论 -
java Flink(十七)flink程序打包 单机部署 以及与kafka遇到的那些问题 解决 NoClassDefFoundError 解决无法消费 解决无法加载类用户classloader
今天记录一下这两天部署flink程序的过程以及遇到的坑。首先我的服务是一个flink计算服务,里边用到了kafka、redis等。一、flink下载安装https://archive.apache.org/dist/flink/点击下载flink版本,这里要选择好自己的flink匹配的hadoop版本以及scala版本。这里我们选择的是比较稳定的1.7.2...原创 2021-05-08 10:21:11 · 3445 阅读 · 0 评论 -
java Flink(十六)checkpoint 检查点使用、状态恢复
Checkpoint是Flink实现容错机制最核心的功能,它能够根据配置周期性地基于Stream中各个Operator/task的状态来生成快照,从而将这些状态数据定期持久化存储下来,当Flink程序一旦意外崩溃时,重新运行程序时可以有选择地从这些快照进行恢复,从而修正因为故障带来的程序数据异常举例来说,如果从kafka消费数据进行逻辑计算,程序出错,我们就可以利用checkpoint恢复到上一次的状态,kafka的消费偏移量也会恢复到之前状态的偏移量。三种保存恢复介绍MemoryStateBa原创 2021-04-28 16:15:47 · 1201 阅读 · 0 评论 -
java Flink(十五)Flink单元测试 在Flink中进行单元测试 map、flatmap、状态、计时器等测试
今天记录一下flink单元测试的编写flink中的单元测试模块也是基于JUnit来实现的,本文主要介绍部分方法用来测试flink中的富函数、状态函数(例如process)以及最简单的map、flatmap等基本的JUnit操作建议百度学习。首先回顾一下这几种flink函数map是最基本的流操作,每次进来的流数据都会进行操作。flatmap是可以有选择的进行操作、输出 输出需要用到Collector状态函数例如process函数里边需要用到状态 状态用来保存之前的数据或者更新信息.原创 2021-04-26 16:14:30 · 2581 阅读 · 2 评论 -
java Flink(十四)Flink实战之电商用户行为分析之统计热门商品并用Flink table api实现 使用:map、aggregate、process、定时器、filter
继续学习了Fklink,今天在网上学习Flink的实战视频,跟着写了一下代码。因为是学习,为了方便主要是用了读取文件的方式获取源数据,主要使用了滚动窗口、keyby、filter等功能。题目:统计某个时间段内,热门商品访问的前几名1、目录结构:1是存放bean对象类 2是放项目代码 3是文件路径2、pom文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.原创 2021-04-12 16:45:25 · 740 阅读 · 0 评论 -
java Flink(十三)Flink底层Process使用Demo以及示例 ---访问时间戳、watermark 以及注册定时事件以及侧输出流
Process:我们之前学习的转换算子是无法访问事件的时间戳信息和水位线信息的。而这 在一些应用场景下,极为重要。例如 MapFunction 这样的 map 转换算子就无法访问 时间戳或者当前事件的事件时间。 基于此,DataStream API 提供了一系列的 Low-Level 转换算子。可以访问时间 戳、watermark 以及注册定时事件。还可以输出特定的一些事件,例如超时事件等。 Process Function 用来构建事件驱动的应用以及实现自定义的业务逻辑(使用之前的 window 函数原创 2021-04-07 17:06:47 · 2174 阅读 · 0 评论 -
java Flink(十二)Flink状态之键控状态(keyed state)
键控状态键控状态是根据输入数据流中定义的键(key)来维护和访问的。Flink 为每个键值维护 一个状态实例,并将具有相同键的所有数据,都分区到同一个算子任务中,这个任务会维护 和处理这个 key 对应的状态。当任务处理一条数据时,它会自动将状态的访问范围限定为当 前数据的 key。因此,具有相同 key 的所有数据都会访问相同的状态。K键控状态是根据输入数据流中定义的键(key)来维护和访问的。Flink 为每个键值维护 一个状态实例,并将具有相同键的所有数据,都分区到同一个算子任务中,这个任务会维护原创 2021-04-07 14:06:33 · 1288 阅读 · 0 评论 -
java Flink(十一)Flink状态之算子状态
状态编程:流式计算分为无状态和有状态两种情况。无状态的计算观察每个独立事件,并 根据最后一个事件输出结果。有状态的计算则会基于多个事件输出结果。算子状态:算子状态的作用范围限定为算子任务。这意味着由同一并行任务所处理的所有 数据都可以访问到相同的状态,状态对于同一任务而言是共享的。算子状态不能由 相同或不同算子的另一个任务访问。package window;import beans.SensorReading;import kafka.KafkaConsumerPro;import原创 2021-04-07 10:29:35 · 1282 阅读 · 0 评论 -
java Flink(十)窗口模式配合Watermark的使用
Watermark的基本概念首先讲解一下Flink中的时间语义:Event Time:是事件创建的时间。它通常由事件中的时间戳描述,例如采集的 日志数据中,每一条日志都会记录自己的生成时间,Flink 通过时间戳分配器访问事 件时间戳。Ingestion Time:是数据进入 Flink 的时间。Processing Time:是每一个执行基于时间操作的算子的本地系统时间,与机器 相关,默认的时间属性就是 Processing Time。 如果我们的数据出现乱序,那么此时出现一个问题,.原创 2021-04-06 17:13:42 · 419 阅读 · 0 评论 -
java Flink(九)窗口模式之计数窗口 以及窗口模式中 触发器trigger 移除器evictor等用法介绍以及延迟处理
窗口模式的介绍见上文,本文简单记录计数窗口模式的使用以及触发器trigger 移除器evictor等用法.trigger() 名为触发器,定义window什么时候关闭,触发计算并输出结果.evictor()名为移除器,定义移除某些数据的逻辑.allowed;ateness(),允许处理迟到的数据.sideOutputLateDate,将迟到的数据放入侧输出流.getSideOutput,获取侧输出流计数窗口模式demopackage window;import bea.原创 2021-04-02 16:54:29 · 405 阅读 · 0 评论 -
java Flink(八)窗口模式之时间窗口 增量聚合以及全窗口模式计算
窗口模式简述:可以把无限的数据流进行切分为有线流的一种方式,它会将流数据分发到有限大小桶中进行分析。类型:时间窗口:按照时间段进行分桶,例如 8点-9点,9点-10点计数窗口:按照数据的个数进行分桶操作:Flink中我们用.window()来定义一个窗口,然后用这个window去做一些聚合或者其他处理操作。window()方法必须在keyBy之后才能使用。Flink提供了 .timeWindow 和 .countWindow来定义时间窗口跟计数窗口。计算:增量聚合函数:每原创 2021-04-02 16:01:23 · 1840 阅读 · 0 评论 -
java Flink(七)从集合读取数据
今天继续学习Flink流处理的集合处理上边是我们创建的传感器对象,下边是Flink流处理程序SensorReading:package beans;//传感器温度读数的数据类型public class SensorReading { //属性 id,时间戳,温度值 private String id; private Long timestamp; private Double temperature; public SensorReadi.原创 2021-03-24 15:08:55 · 1035 阅读 · 0 评论 -
java Flink(六) 运行架构说明、提交流程介绍
今天继续学习Flink,虽然是学习用法,但是还是要对框架的结构进行简单了解在这我直接上人家课件的截图。原创 2021-03-24 14:21:28 · 172 阅读 · 0 评论