欢迎来到皮皮网网首页

【rocketmq 源码剖析】【vip视频源码软件】【linux qt 源码调试】kafka connector 源码

来源:企业内部管理系统源码下载 时间:2024-11-25 07:36:57

1.说说Flink中的State
2.Flink Collector Output 接口源码解析

kafka connector 源码

说说Flink中的State

       åˆ†æž&回答基本类型划分

       åœ¨Flink中,按照基本类型,对State做了以下两类的划分:

       Keyed State,和Key有关的状态类型,它只能被基于KeyedStream之上的操作,方法所使用。我们可以从逻辑上理解这种状态是一个并行度操作实例和一种Key的对应, <parallel-operator-instance,源码 key>。保存State的数据结构:ValueState、ListState、MapState、ReducingState、AggregatingState<IN,OUT> 等

       Operator State(或者non-keyed state) ,它是和Key无关的一种状态类型。相应地我们从逻辑上去理解这个概念,它相当于一个并行度实例,对应一份状态数据。因为这里没有涉及Key的概念,所以在并行度(扩/缩容)发生变化的时候,这里会有状态数据的重分布的处理。?如:Flink中的KafkaConnector就使?了 Operator State,它会在每个Connector实例中,保存该实例消费Topic的所有(partition,offset)映射。如下图:

[]()组织形式划分

       ä½†æ˜¯åœ¨è¿™é‡Œè¿˜æœ‰ä¸€ç§æŒ‰ç…§ç»„织形式的划分,也可以理解为按照runtime层面的划分,又可以分为一下两类:

       Managed State,这类State的内部结构完全由Flink runtime内部来控制,包括如何将它们编码写入到checkpoint中等等。

       Raw State,这类State就比较显得灵活一些,它们被保留在操作运行实例内部的数据结构中。从Flink系统角度来观察,在checkpoint时,它只知道的是这些状态数据是以连续字节的形式被写入checkpoint中。等待进行状态恢复时,又从字节数据反序列化为状态对象。

       Managed State可以在所有的data stream相关方法中被使用,官方也是推荐优先使用这类State,因为它能被Flink runtime内部做自动重分布而且能被更好地进行内存管理。

反思&扩展State Time-To-Live (TTL)

       åœ¨Flink内部,我们能够对State设置TTL,使其状态过期然后被系统清理掉。针对State TTL,可详见StateTtlConfig类的配置设置。

[]()另类的一种State:Broadcast State模式

       Broadcast State具有Broadcast流的特殊属性,它是一种小数据状态广播向其它流的形式,从而避免大数据流量的传输。在这里,其它流是对广播状态只有只读操作的允许,因为不同任务间没有跨任务的信息交流。一旦有运行实例对于广播状态数据进行更新了,就会造成状态不一致现象。

[]()State的可查询性

       State状态是一类能够反映任务当前执行情况的信息数据。所以当我们想要了解任务的执行情况时,我们就会想能不能够去查询里面的状态信息呢?Flink官方给出的答案是可以的,它有提供相关的API不过还不保证其完全稳定性。而且这里有一点需要注意,当我们对状态进行查询时,同时地它的信息被并发修改。Flink为了避免Job的处理延时,并没有对此做完全地同步控制。

       é™¤äº†é€šè¿‡API的获取方式外,这里还支持一种QueryableStateStream?来获取状态数据的方式。任务状态数据将会更新到QueryableStateStream 流中,可以理解为是State的一个sink。

[]()定制化State序列化/反序列实现

       Flink内部支持定制化的State序列化器/反序列化实现。这里的序列化过程指的是将状态数据序列为字节数据写到checkpoint中,再从checkpoint文件字节数据反序列为状态对象数据。针对不同类型的State数据,可以定义各自不同的序列化/反序列的实现。

[]()State的序列化演进

       è¿™æ¥è¿˜å­˜åœ¨å¼‚构序列化实现的演进问题,因为存在一种情况,任务在恢复状态数据时,会由新的序列化引入。如果出现新的序列化实现无法读取老的状态数据,那么需要做一个兼容性的改动,进行状态迁移,或者先用老的序列化实现读取老状态,然后新的状态用新的序列化方式写出。

       State在Flink任务的运行时保存了非常重要的数据,明白如何去更好地使用State将会对我们了解,恢复任务有着很大的帮助。

       åˆ·åˆ·é¢è¯•ï¼šä¸€ç«™å¼è§£å†³é¢è¯•é—®é¢˜ï¼Œå¦‚有好的面试知识或技巧期待您的共享!

       åŽŸæ–‡ï¼š/post/

Flink Collector Output 接口源码解析

       Flink Collector Output 接口源码解析

       Flink中的Collector接口和其扩展Output接口在数据传递中起关键作用。Output接口增加了Watermark功能,源码是源码数据传输的基石。本文将深入解析collect方法及相关重要实现类,源码帮助理解数据传递的源码rocketmq 源码剖析逻辑和场景划分。

       Collector和Output接口

       Collector接口有2个核心方法,源码vip视频源码软件Output接口则增加了4个功能,源码WatermarkGaugeExposingOutput接口则专注于显示Watermark值。源码主要关注collect方法,源码它是源码数据发送的核心操作,Flink中有多个Output实现类,源码针对不同场景如数据传递、源码Metrics统计、源码linux qt 源码调试广播和时间戳处理。源码

       Output实现类分类

       Output类可以归类为:同一operatorChain内的源码数据传递(如ChainingOutput和CopyingChainingOutput)、跨operatorChain间(RecordWriterOutput)、统计Metrics(CountingOutput)、ping端口检测源码广播(BroadcastingOutputCollector)和时间戳处理(TimestampedCollector)。

       示例应用与调用链路

       通过一个示例,我们了解了Kafka Source与Map算子之间的数据传递使用ChainingOutput,而Map到Process之间的棋牌脚本源码传递则用RecordWriterOutput。在不同Output的选择中,objectReuse配置起着决定性作用,影响性能和安全性。

       总结来说,ChainingOutput用于operatorChain内部,RecordWriterOutput处理跨chain,CountingOutput负责Metrics,BroadcastingOutputCollector用于广播,TimestampedCollector则用于设置时间戳。开启objectReuse会影响选择的Output类型。

       阅读推荐

       Flink任务实时监控

       Flink on yarn日志收集

       Kafka Connector更新

       自定义Kafka反序列化

       SQL JSON Format源码解析

       Yarn远程调试源码

       State Processor API状态操作

       侧流输出源码

       Broadcast流状态源码解析

       Flink启动流程分析

       Print SQL Connector取样功能