Flink实战经验
文章平均质量分 61
区别于flink从无到有专栏,此栏目将会记录flink实战中的痛点难点解决方案,以及遇到的问题
我先森
资深大数据开发工程师,在游戏领域,工业领域,以及数字化领域负责过分布式计算大型框架底层研发,对分布式计算有一定见解。
展开
-
【实战-07】flink 自定义Trigger 实现count 和timeout
背景加入我们需要基于processTime 处理数据,使用5 分钟的滑动窗口。伪代码如下window(TumblingProcessingTimeWindows.of(Time.minites(10))) .process(new ProcessWindowFunction<Tuple2<String, Long>, String, String, TimeWindow>() { @Override原创 2023-10-08 19:57:56 · 407 阅读 · 1 评论 -
[实战-10]FlinkSql 如何实现数据去重?
很多时候flink消费上游kafka的数据是有重复的,因此有时候我们想数据在落盘之前进行去重,这在实际开发中具有广泛的应用场景,此处不说详细代码,只粘贴相应的flinksql。原创 2023-08-29 16:36:38 · 1633 阅读 · 3 评论 -
【实战-01】flink cdc 实时数据同步利器
对很多初入门的人来说是无法理解cdc到底是什么个东西。有这样一个需求,比如在mysql数据库中存在很多数据,但是公司要把mysql中的数据同步到数据仓库(starrocks), 数据仓库你可以理解为存储了各种各样来自不同数据库中表。数据的同步目前对mysql来说比较常见是方式是使用:datax 和 canal配合, 为什么需要这两个框架配合呢?因为datax不支持实时的同步, datax只能定义一个范围去同步,而且同步结束后程序就结束了。原创 2022-12-21 17:17:25 · 8609 阅读 · 1 评论 -
【实战-08】 flink自定义Map中的变量的行为
则当前线程的valueState是和某一个key绑定的,符合flink预期行为,但是ArrayList以及其它你定义的变量则不做保证。这说明了,keBy后的逻辑,ArrayList不会按照预期的行为执行。自定义Map或者别的算子的时候,有时候需要定义一些类变量,在flink内部高并发的情况下需要正确理解这些便令的行为。keyBy之后,理论上相同key的会在map中用同样的处理逻辑,我们的预期行为是输出:bb,cc,dd。但是用ArrayList实现的逻辑最终输出却是:bb,bc,cc,dd。原创 2024-02-26 12:22:38 · 387 阅读 · 0 评论 -
【实战-09】flink DataStream 如何实现去重
假设我们有一批订单数据实时接入kafka, flink需要对订单数据做处理,值得注意的是订单数据 要求绝对不可以重复处理。考虑到订单数据上报到kafka的时候存在重复上报的可能性,因此需要我们flink处理的时候 避免进行重复处理。在flinksql 中我们有去重的方式,请参考flinksql 去重。但是我们本小结来讨论DataStream Api如何去重。原创 2023-11-09 15:59:08 · 1007 阅读 · 1 评论 -
【实战-08】flink 消费kafka自定义序列化
/ .setStartingOffsets(OffsetsInitializer.committedOffsets(OffsetResetStrategy.EARLIEST))//【groupid 存在offset 则从offset消费,否则从最早开始消费】// .setStartingOffsets(OffsetsInitializer.latest())//【无论如何都从最新开始消费】*自定义kafka反序列化。//下面是main主函数。原创 2023-11-06 18:35:41 · 721 阅读 · 0 评论 -
【实战-06】如何正确设置flink参数,全网最全
设置flink参数,yarn.provided.usrlib.diryarn.provided.lib.dirs原创 2023-09-06 11:09:48 · 1210 阅读 · 0 评论 -
【实战-05】 flinksql look up join
look up join 能做什么?不饶关子直接说答案, look up join 就是 广播。重要是事情说三遍,广播。flinksql中的look up join 就类似于flinks flink Datastream api中的广播的概念,但是又不完全相同,对于初次访问的数据会加入缓存, 一定时间未访问到的则会从缓存中去除。而广播则是直接广播到每个exxcotor.比如我们有一张订单表orders, 那么假设我们在进行flink计算的时候想获取该订单的相关的用户数据。原创 2023-09-04 16:52:28 · 1126 阅读 · 0 评论 -
[实战-04] 监控kafka一分钟没数据就报警
我们有一个topic是游戏数据,正常来说几秒钟就会有数据过来,为了监控上游数据接口是不是有问题,可通过监控kafa数据在指定时间内是否有数据产生,没有数据则进行告警。本代码是伪代码,读者可自行修改成自己想要 的。借助状态ValueState 和定时器,这要求必须是process方法,且必须是keyByStream.原创 2023-07-03 14:14:07 · 292 阅读 · 0 评论 -
[实战-03]关于如何处理算子内部的异常数据
这两个经验至关重要,如果不在map flatmap等后续计算之前处理这些异常数据,会导致后续的代码可读性变差,因为你需要很多异常捕捉,谁写谁知道,简直痛苦至极。原创 2023-03-21 14:54:34 · 123 阅读 · 1 评论 -
【实战02】flinksql mysql真正的批量插入
因为我们之前有一个任务数据量是现在这个任务的100倍左右,但是从来没有出现过背压,理论上当前任务也不应该出现背压。这两个任务的逻辑极其相似,唯一不同的大方在于之前写入的是kafka, 现在写入的是mysql. 那么就只可能是sink到mysql太慢导致的背压。加上这两个参数之后,我以为就可以实现批量插入了,但是结果依旧产生背压,也就是说我配置的这两个参数没有真的起作用,那么问题出在哪里呢?这个问题困扰两天了,一个很简单的flink任务,从kafka读出数据,然后开窗计算之后将结果存入mysql.原创 2023-02-22 18:32:40 · 1521 阅读 · 0 评论