
Flink
文章平均质量分 57
flink相关内容。虽然有笔记,但是笔记并不能记录很多很全的内容,这里就作为一个记录笔记的地方吧
iFence
微信公众号:大数据报文
展开
-
flink sql1.18.0连接SASL_PLAINTEXT认证的kafka3.3.1
注意三个容器都映射了/opt/flink目录。docker-compose运行了一个jobmanager、一个taskmanager和一个sql-client。其次,username和password的双引号不需要写反斜杠,写反斜杠反而会报错。,分别放入上述三个文件夹的lib目录下。⑤后面的username和password需要根据实际情况修改。②标识的字段为topic中存储的字段,根据自己topic来。①标识字段为kafka自带字段,topic中没有也会自带。三个文件夹内容是一样的,只是名字不一样。原创 2023-12-20 10:01:30 · 2349 阅读 · 6 评论 -
flink连接需要密码认证的elasticsearch7
前言flink官网有连接es的案例,但是官网案例没有带认证,几经辗转终于找到带认证的sink到es的方式。需要可以参考。代码maven依赖<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-elasticsearch7_2.11</artifactId> <version>1.13.0</versi原创 2021-06-25 13:32:35 · 3613 阅读 · 6 评论 -
本地jvm执行flink程序带web ui
使用StreamExecutionEnvironment executionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment();可以获取flink执行环境。但是本地jvm执行的时候是不带web ui的。有时候出于监控的考虑,需要带着监控页面查看。任务运行状况,可以使用下面方式获取flink本地执行环境,并带有web ui。Configuration config = new Configuration();config.原创 2021-06-24 11:23:27 · 433 阅读 · 0 评论 -
Flink消费Redis Stream数据
前言对于流处理,感觉flink近乎苛刻的只对kafka友好。当然我对kafka也有天然的好感,但是相对于redis而言,kafka还是稍显复杂了一些。我们的生产环境中没有kafka,只有redis。装一套kafka集群可以吗。由于业务长期的累积,引入一套全新的架构真的是难如登天。所以只能委屈求全,在我们的业务系统中准备使用redis作为flink的数据源。幸运的是,在redis5中已经有原生支持消息队列的数据存储结构了,即stream。但是现在网上介绍和使用redis stream的并不多。常用的r原创 2021-06-20 19:34:57 · 1035 阅读 · 1 评论 -
Flink学习2——word count程序
本文比较简单,是大数据入门的基本程序——word count。程序虽然简单,但是麻雀虽小,五脏俱全,这里面包含了Flink程序最最基本的组件。原创 2021-05-30 16:10:10 · 669 阅读 · 0 评论 -
Flink学习1——运行时架构(standalone模式)
Flink系统是主从模式,主要有两个组件构成分别是JobManager(Master)和TaskManager(Slave)。组件之间的通信借助于Akka。下图是standalone模式下的运行时架构图 JobManager相当于Yarn中的ResourceManager,TaskManager相当于Yarn中的NodeManager,TaskSlot相当于Yarn的Container,上图相当于spark的Standalone,需要Flink自己管理资源的情况。类别归类比,最终Flink的Tas原创 2021-05-30 15:33:42 · 1090 阅读 · 0 评论 -
Springboot集成Flink——本地方式运行Flink jar包
前言首先有一个问题,Flink程序可以在idea中正常运行,但是将Flink打成jar包,使用java -jar的方式运行jar包就会报错。这个问题一直没有解决。正好最近遇到这样一个场景,需要将flink程序集成到Springboot程序中(不要问为啥要在本地执行flink程序,不上集群),集成完以后没想到效果出奇的好,Springboot程序可以正常运行,flink程序也可以通过jar的方式启动了。下面是集成过程。Springboot集成Flink第一步,创建Springboot项目。原创 2021-05-18 00:14:05 · 7005 阅读 · 12 评论 -
Flink 流表与维表join(流批join)——使用异步IO(async io)实现
前言之前的文章中讲过了Flink 流流join也讲过了翻车版本的流批join。为什么翻车了,那篇文章也说了。如果事实表和维度表进行join,Flink会认为这是一个批处理程序。也就是说程序会自己暂停。流批join的需求还蛮多的,比如我们有一张用户点击网站的数据,还有一张用户表在MySQL中,我们需要关联MySQL中的数据来丰富实时流数据,这就需要用到流批join了。数据MySQL数据模拟维度表。Kafka数据模拟点击流。代码异步io函数pac..原创 2020-12-27 11:38:37 · 1651 阅读 · 1 评论 -
【已解决】Flink Table 转 DataStream报错
Flink table和DataStream互转的时候,如果指定了自定义的pojo类,需要这个类是public的,否则就会报如下错误。Exception in thread "main" org.apache.flink.table.api.TableException: A raw type backed by type information has no serializable string representation. It needs to be resolved into a p.原创 2020-12-27 10:09:10 · 743 阅读 · 0 评论 -
Flink SQL流表与维表join实践
流表就是像kafka这种消息队列中的数据。维表是像MySQL中的静态数据。想要使用Flink SQL的方式join两张表,静态维表的作用类似一张字典表。流表源源不断的来数据,然后去内存中查询字典将流表的数据更新然后插入到MySQL数据库中。依赖flink table该有的依赖就不说了。下面是连接kafka和jdbc的依赖。<dependency> <groupId>org.apache.flink</groupId>原创 2020-12-21 23:34:10 · 1521 阅读 · 1 评论 -
Flink Blink Planner和Older Planner的区别
Blink做到了真正的流批统一,即将批看做是特殊的流,把处理批的API和处理流的API做成了一样的。也就是说不管是批数据还是流数据,底层统统都是DataStream。所以使用Blink作为table planner的程序,Table和DataSet是不能相互转换的。由于第一条原因的关系,Blink planner是不支持BatchTableSource的,它只支持StreamTableSource。Blink Planner和Old Planner的FilterableTableSource是不兼容的.翻译 2020-12-20 11:56:34 · 1663 阅读 · 1 评论 -
Flink1.11 Table/SQL API 入门
下面是一个table api的模板。主要实现的功能是通过SQL API创建kafka source表和es sink表,然后将source表的数据插入到sink表中。当然实际上下面的代码有两个sink,除了sink到es以外还sink到了控制台。依赖<dependencies> <dependency> <groupId>org.apache.flink</groupId> &l原创 2020-12-20 11:52:06 · 244 阅读 · 5 评论 -
Flink process function使用详解
前言process function是flink中比较底层的函数。能够实现一些高层函数无法实现的功能。它可以操作三个非常重要的对象:event:数据流中的单个元素state:状态timers:(事件时间或处理时间)定时器,仅在keyedStream中可以访问。process function可以看做是可以访问state和timer的flatmap function。代码假设有这样一个需求,实现session window的功能。每个间隔时间为6s的“window”输出对应<key,c原创 2020-12-19 14:52:24 · 2736 阅读 · 2 评论 -
Flink join(流流)详解(一)
本文基于flink 1.11进行测试。前言本文仅仅作为一个Flink join入门demo的记录,会用到Flink1.11 事件时间(event time)、watermark、watermarkstrategy使用详细案例文章的知识。代码创建用于join的两个数据源package it.kenn.source;import org.apache.flink.streaming.api.functions.source.SourceFunction;import scala.原创 2020-12-09 12:40:00 · 2370 阅读 · 0 评论 -
Flink window function及常用窗口算子
代码这里先不讲原理,只先把代码列出来,有空整理。package it.kenn.window;import org.apache.flink.api.common.functions.AggregateFunction;import org.apache.flink.api.common.functions.ReduceFunction;import org.apache.flink.api.common.typeinfo.TypeHint;import org.apach...原创 2020-12-08 22:30:38 · 462 阅读 · 0 评论 -
【已解决 Flink Java API问题】The return type of function ‘xxx‘ could not be determined automatically
Flink Java API不像Scala API可以随便写lambda表达式,写完以后需要使用returns方法显式指定返回值类型,否则会报下面错误,大概意思就是说Java的lambda表达式不能提供足够的类型信息,需要指定返回值类型。不推荐使用lambda表达式而是使用匿名类。log4j:WARN No appenders could be found for logger (org.apache.flink.api.java.ClosureCleaner).log4j:WARN Please原创 2020-12-08 20:42:22 · 2104 阅读 · 0 评论 -
Flink累加器、计数器的使用
Flink累加器的结果只能在作业结束以后才能得到。这就意味着,如果是一个一直不间断执行的流处理程序是无法得到累加器结果的。只有批处理成功,也就是会结束的flink程序才能得到累加器结果。(我试过强行停止正在执行的flink程序无法得到结果,不知道由于某些异常导致flink程序停止是否可以得到累加器的结果)。最直接的累加器(Accumulator)就是计数器(Counter)。可以通过Accumulator.add(V value)方法增加累加器的值。在Flink程序的最后,Flink job会收集每原创 2020-12-06 21:31:07 · 1462 阅读 · 0 评论 -
flink 检查点(checkpoint)配置与使用
前言之前文章有讲过flink的有状态算子。有状态算子就是讲算子产生的中间结果存储在Flink的一些内存数据结构中,比如ValueState、MapState等等。这可以算一种计算机制。比如对流中的某个字段进行累加,我们必须要保存累加的中间结果,下一个事件才能知道加谁。但是距离容灾还差一段距离。比如job失败了,程序都没有了,内存中也就没有状态数据了。这时候就需要检查点了。所以,检查点就是定期保存任务状态的机制。但是状态又保存到哪里了呢?之前说过的状态后端。检查点是用于错误恢复的,但这是有条件的:原创 2020-12-01 10:51:57 · 10031 阅读 · 0 评论 -
flink 1.11 广播状态(Broadcast State)的使用
前言上篇文章简单将了有状态算子的使用。本文将着重说明广播状态(Broadcast State)的使用。广播状态还是上篇文章中介绍的基本状态,只是将其进行了广播。flink的join算子也是基于广播状态来实现的。需求这里使用flink逛网提供的需求:一个流中包含的事件Item,Item中包含两个属性,一个为Color,一个为Shape。 我们在在这个Item流中过滤符合特定模式的数据,比如三角形后面跟一个正方形。我们称这些特定模式为Rule。Rule也是通过一个流提供的,也就是说流中有很原创 2020-11-30 22:36:07 · 1346 阅读 · 0 评论 -
Flink 常用算子总结
1.前言之前公司是用spark的,现在公司用flink,flink中有很多与spark不同的算子,功能非常强大,这里对一些不同于spark的算子使用方法进行总结,方便以后查阅。一次可能更新不全,会慢慢总结,希望路过的看到的留言帮忙一起总结,谢谢大家。2.connect/coMap/coFlatMapConnect算子主要是为了合并两种或者多种不同数据类型的数据集,合并后会保留原来数据集的数据类型。连接操作允许共享状态数据,也就是说在多个数据集之间可以操作和查看对方数据集的状态。对于Con原创 2020-11-29 23:09:44 · 840 阅读 · 0 评论 -
Flink1.11 有状态算子的使用
1.前言时间:2020年11月29日在Flink中所有算子(如map,flatmap,reduce等等)都可以是有状态的。用Scala写起来会有一些骚操作,比如使用lazy定义descriptor等。但是这里暂时不会讲到,本文以Java API为主。有状态操作大致可以分为Key State(键控状态)和Operator State(算子状态),由于键控状态比较常用,本文会以键控状态为主进行总结。状态算子跟状态后端有一定的关系(算子的状态是存在状态后端当中的,因此实际开发中可能需要先设置使用何原创 2020-11-29 11:06:14 · 897 阅读 · 0 评论 -
Flink1.11 事件时间(event time)、watermark、watermarkstrategy使用详细案例
前言flink1.11中有了新版的指定watermark和watermarkstrategy API。这里先就其中一种情况(代码中指定事件时间语义、使用周期性水印,从数据中抽取事件时间字段)写了一个简单的demo,作为入门,详细的关于新版事件时间和watermark的说明有时间再补充。下面代码的数据来自metricbeat,本机启动metricbeat将数据接入kafka,flink消费kafka中的数据,于是有了下面程序。metricbeat中的数据为json格式,有一个时间字段名为@time原创 2020-11-25 23:35:43 · 2881 阅读 · 2 评论 -
【偏理论】Flink1.11 状态后端说明及部分源码阅读
状态后端类型状态后端是什么?用于存储flink应用状态的结构。我们都知道Flink有很多有状态的算子,这些算子的状态需要有地方进行存储,状态后端就是用于存储状态的结构。Flink1.11中共支持3中类型的状态后端:MemoryStateBackend:适合本地测试和状态本身很小的情况下使用 FsStateBackend:适合大状态,长窗口和大的key/value状态 RocksDBStateBackend:适合大状态,长窗口和大的key/value状态(与文件系统状态后端相同)Memory原创 2020-11-22 13:16:29 · 624 阅读 · 0 评论 -
java Flink 1.11 demo
其实我挺排斥用java写大数据代码的,但是没办法公司用java写。不过Java写也是有道理的嘛,所以就从Scala转到了Java。依赖<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>${flink.version}</version><!--原创 2020-11-19 09:53:51 · 525 阅读 · 0 评论 -
Flink利用process算子进行分流操作
需求kafka中存有从metricbeat收集的各种数据系统指标数据存到同一个topic中,但是各种指标数据不尽相同,这时候需要将相同结构的数据收集到一起分开处理,就用到了Flink的分流操作。依赖主要有flink、kafka和解析json的依赖。<dependencies><dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-str原创 2020-11-18 21:53:19 · 1647 阅读 · 0 评论 -
Flink1.11读取kafka数据
基础内容,但是很多细节经常忘记,比如要导入那些包之类的。索性就记录下来,方便以后查阅。导包<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-scala_2.11</artifactId> <version>1.11.1</version></dependency><!原创 2020-11-18 14:27:14 · 520 阅读 · 0 评论