1.说说Flinkä¸çState
2.Flink Collector Output 接口源码解析
说说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方法及相关重要实现类,源码帮助理解数据传递的源码recovery源码编译教程逻辑和场景划分。Collector和Output接口
Collector接口有2个核心方法,源码wps源码源代码Output接口则增加了4个功能,源码WatermarkGaugeExposingOutput接口则专注于显示Watermark值。源码主要关注collect方法,源码它是源码数据发送的核心操作,Flink中有多个Output实现类,源码针对不同场景如数据传递、源码Metrics统计、源码libgdx地牢猎手源码广播和时间戳处理。源码Output实现类分类
Output类可以归类为:同一operatorChain内的源码数据传递(如ChainingOutput和CopyingChainingOutput)、跨operatorChain间(RecordWriterOutput)、统计Metrics(CountingOutput)、禁止访问界面源码广播(BroadcastingOutputCollector)和时间戳处理(TimestampedCollector)。示例应用与调用链路
通过一个示例,我们了解了Kafka Source与Map算子之间的数据传递使用ChainingOutput,而Map到Process之间的报修管理app源码传递则用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取样功能