栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

flink sql之自定义connenctor

flink sql之自定义connenctor

解决场景:使用阿里云flink 托管平台 flink sql,数据流不是连续的,计算某个时间段内数据,计算周期可能跨时间段,窗口默认左闭右开,数据流的末尾窗口,需要左闭右闭,在datastream api中可通过自定义窗口和自定义watermark来解决这个问题,为解决flink sql中业务规则产生的问题,可通过自定义connector中在原生窗口下的水位线推进。

实现原理参考这个:自定义生成水印:www.modb.pro/db/44375 自定义connenctor:https://www.jianshu.com/p/9dfd932af0af

实现方法:

定义两个类继承分别继承WaterMarkStategy WatermarkGenerator类,重写方法

同时将自定义继承DynamicTableSource(创建动态源表)的子类中的applyWatermark()方法进行重写。

生成水印:

WatermarkGenerator中的两个方法:

onEvent:每条记录进来都会调用一次这个方法,入参有3个,第一个是记录,第二个是记录携带的时间,如果注册了时间就会有,第三个参数时水印发射器WatermarkOutputoutput,可以通过这个参数对水印进行发射,用户可以根据自己的业务场景来编写自己的水印生成以及发射逻辑。该方法的重点是每条记录都会调用.

onPeriodicEmit: 该方法是Flink提供的一个定时器方法,每隔一段时间会调用此方法,入参是WatermarkOutputoutput,用户可以通过这个方法每隔一段时间发送一次水印,当记录数过多时,每条记录都发送一次水印明显不合适,也影响性能,此时可以通过这个方法进行水印的定时发送,而onEvent只记录当前水印而选择不发射出去。该方法的参数配置为env.getConfig().setAutoWatermarkInterval(300L),入参是毫秒数,表示隔多少毫秒向下游算子发送一次水印。

生成水印先记这么多,之后对flink深入了解后,再研究。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/746335.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号