Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Apache Flink£ºÌØÐÔ¡¢¸ÅÄî¡¢×é¼þÕ»¡¢¼Ü¹¹¼°Ô­Àí·ÖÎö
 
×÷ÕߣºYanjun  À´Ô´;¼òµ¥Ö®ÃÀ·¢²¼ÓÚ 2016-10-27
  4918  次浏览      27
 

Apache FlinkÊÇÒ»¸öÃæÏò·Ö²¼Ê½Êý¾ÝÁ÷´¦ÀíºÍÅúÁ¿Êý¾Ý´¦ÀíµÄ¿ªÔ´¼ÆËãÆ½Ì¨£¬ËüÄܹ»»ùÓÚͬһ¸öFlinkÔËÐÐʱ£¨Flink Runtime£©£¬Ìṩ֧³ÖÁ÷´¦ÀíºÍÅú´¦ÀíÁ½ÖÖÀàÐÍÓ¦ÓõŦÄÜ¡£ÏÖÓеĿªÔ´¼ÆËã·½°¸£¬»á°ÑÁ÷´¦ÀíºÍÅú´¦Àí×÷ΪÁ½ÖÖ²»Í¬µÄÓ¦ÓÃÀàÐÍ£¬ÒòΪËûÃÇËüÃÇËùÌṩµÄSLAÊÇÍêÈ«²»ÏàͬµÄ£ºÁ÷´¦ÀíÒ»°ãÐèÒªÖ§³ÖµÍÑÓ³Ù¡¢Exactly-once±£Ö¤£¬¶øÅú´¦ÀíÐèÒªÖ§³Ö¸ßÍÌÍ¡¢¸ßЧ´¦Àí£¬ËùÒÔÔÚʵÏÖµÄʱºòͨ³£ÊÇ·Ö±ð¸ø³öÁ½Ì×ʵÏÖ·½·¨£¬»òÕßͨ¹ýÒ»¸ö¶ÀÁ¢µÄ¿ªÔ´¿ò¼ÜÀ´ÊµÏÖÆäÖÐÿһÖÖ´¦Àí·½°¸¡£ÀýÈ磬ʵÏÖÅú´¦ÀíµÄ¿ªÔ´·½°¸ÓÐMapReduce¡¢Tez¡¢Crunch¡¢Spark£¬ÊµÏÖÁ÷´¦ÀíµÄ¿ªÔ´·½°¸ÓÐSamza¡¢Storm¡£

FlinkÔÚʵÏÖÁ÷´¦ÀíºÍÅú´¦Àíʱ£¬Ó봫ͳµÄһЩ·½°¸ÍêÈ«²»Í¬£¬Ëü´ÓÁíÒ»¸öÊӽǿ´´ýÁ÷´¦ÀíºÍÅú´¦Àí£¬½«¶þÕßͳһÆðÀ´£ºFlinkÊÇÍêȫ֧³ÖÁ÷´¦Àí£¬Ò²¾ÍÊÇ˵×÷ΪÁ÷´¦Àí¿´´ýʱÊäÈëÊý¾ÝÁ÷ÊÇÎÞ½çµÄ£»Åú´¦Àí±»×÷ΪһÖÖÌØÊâµÄÁ÷´¦Àí£¬Ö»ÊÇËüµÄÊäÈëÊý¾ÝÁ÷±»¶¨ÒåΪÓнçµÄ¡£»ùÓÚͬһ¸öFlinkÔËÐÐʱ£¨Flink Runtime£©£¬·Ö±ðÌṩÁËÁ÷´¦ÀíºÍÅú´¦ÀíAPI£¬¶øÕâÁ½ÖÖAPIÒ²ÊÇʵÏÖÉϲãÃæÏòÁ÷´¦Àí¡¢Åú´¦ÀíÀàÐÍÓ¦Óÿò¼ÜµÄ»ù´¡¡£

»ù±¾ÌØÐÔ

¹ØÓÚFlinkËùÖ§³ÖµÄÌØÐÔ£¬ÎÒÕâÀïÖ»ÊÇͨ¹ý·ÖÀàµÄ·½Ê½¼òµ¥×öÒ»ÏÂÊáÀí£¬Éæ¼°µ½¾ßÌåµÄһЩ¸ÅÄî¼°ÆäÔ­Àí»áÔÚºóÃæµÄ²¿·Ö×öÏêϸ˵Ã÷¡£

Á÷´¦ÀíÌØÐÔ

Ö§³Ö¸ßÍÌÍ¡¢µÍÑÓ³Ù¡¢¸ßÐÔÄܵÄÁ÷´¦Àí

Ö§³Ö´øÓÐʼþʱ¼äµÄ´°¿Ú£¨Window£©²Ù×÷

Ö§³ÖÓÐ״̬¼ÆËãµÄExactly-onceÓïÒå

Ö§³Ö¸ß¶ÈÁé»îµÄ´°¿Ú£¨Window£©²Ù×÷£¬Ö§³Ö»ùÓÚtime¡¢count¡¢session£¬ÒÔ¼°data-drivenµÄ´°¿Ú²Ù×÷

Ö§³Ö¾ßÓÐBackpressure¹¦ÄܵijÖÐøÁ÷Ä£ÐÍ

Ö§³Ö»ùÓÚÇáÁ¿¼¶·Ö²¼Ê½¿ìÕÕ£¨Snapshot£©ÊµÏÖµÄÈÝ´í

Ò»¸öÔËÐÐʱͬʱ֧³ÖBatch on Streaming´¦ÀíºÍStreaming´¦Àí

FlinkÔÚJVMÄÚ²¿ÊµÏÖÁË×Ô¼ºµÄÄÚ´æ¹ÜÀí

Ö§³Öµü´ú¼ÆËã

Ö§³Ö³ÌÐò×Ô¶¯ÓÅ»¯£º±ÜÃâÌØ¶¨Çé¿öÏÂShuffle¡¢ÅÅÐòµÈ°º¹ó²Ù×÷£¬Öмä½á¹ûÓбØÒª½øÐлº´æ

APIÖ§³Ö

¶ÔStreamingÊý¾ÝÀàÓ¦Óã¬ÌṩDataStream API

¶ÔÅú´¦ÀíÀàÓ¦Óã¬ÌṩDataSet API£¨Ö§³ÖJava/Scala£©

ibrariesÖ§³Ö

Ö§³Ö»úÆ÷ѧϰ£¨FlinkML£©

Ö§³Öͼ·ÖÎö£¨Gelly£©

Ö§³Ö¹ØÏµÊý¾Ý´¦Àí£¨Table£©

Ö§³Ö¸´ÔÓʼþ´¦Àí£¨CEP£©

ÕûºÏÖ§³Ö

Ö§³ÖFlink on YARN

Ö§³ÖHDFS

Ö§³ÖÀ´×ÔKafkaµÄÊäÈëÊý¾Ý

Ö§³ÖApache HBase

Ö§³ÖHadoop³ÌÐò

Ö§³ÖTachyon

Ö§³ÖElasticSearch

Ö§³ÖRabbitMQ

Ö§³ÖApache Storm

Ö§³ÖS3

Ö§³ÖXtreemFS

»ù±¾¸ÅÄî

Stream & Transformation & Operator

Óû§ÊµÏÖµÄFlink³ÌÐòÊÇÓÉStreamºÍTransformationÕâÁ½¸ö»ù±¾¹¹½¨¿é×é³É£¬ÆäÖÐStreamÊÇÒ»¸öÖмä½á¹ûÊý¾Ý£¬¶øTransformationÊÇÒ»¸ö²Ù×÷£¬Ëü¶ÔÒ»¸ö»ò¶à¸öÊäÈëStream½øÐмÆËã´¦Àí£¬Êä³öÒ»¸ö»ò¶à¸ö½á¹ûStream¡£µ±Ò»¸öFlink³ÌÐò±»Ö´ÐеÄʱºò£¬Ëü»á±»Ó³ÉäΪStreaming Dataflow¡£Ò»¸öStreaming DataflowÊÇÓÉÒ»×éStreamºÍTransformation Operator×é³É£¬ËüÀàËÆÓÚÒ»¸öDAGͼ£¬ÔÚÆô¶¯µÄʱºò´ÓÒ»¸ö»ò¶à¸öSource Operator¿ªÊ¼£¬½áÊøÓÚÒ»¸ö»ò¶à¸öSink Operator¡£

ÏÂÃæÊÇÒ»¸öÓÉFlink³ÌÐòÓ³ÉäΪStreaming DataflowµÄʾÒâͼ£¬ÈçÏÂËùʾ£º

flink-streaming-dataflow-example

ÉÏͼÖУ¬FlinkKafkaConsumerÊÇÒ»¸öSource Operator£¬map¡¢keyBy¡¢timeWindow¡¢applyÊÇTransformation Operator£¬RollingSinkÊÇÒ»¸öSink Operator¡£

Parallel Dataflow

ÔÚFlinkÖУ¬³ÌÐòÌìÉúÊDz¢Ðкͷֲ¼Ê½µÄ£ºÒ»¸öStream¿ÉÒÔ±»·Ö³É¶à¸öStream·ÖÇø£¨Stream Partitions£©£¬Ò»¸öOperator¿ÉÒÔ±»·Ö³É¶à¸öOperator Subtask£¬Ã¿Ò»¸öOperator SubtaskÊÇÔÚ²»Í¬µÄÏß³ÌÖжÀÁ¢Ö´Ðеġ£Ò»¸öOperatorµÄ²¢Ðжȣ¬µÈÓÚOperator SubtaskµÄ¸öÊý£¬Ò»¸öStreamµÄ²¢ÐжÈ×ÜÊǵÈÓÚÉú³ÉËüµÄOperatorµÄ²¢Ðжȡ£

ÓйØParallel DataflowµÄʵÀý£¬ÈçÏÂͼËùʾ£º

flink-parallel-dataflow

ÉÏͼStreaming DataflowµÄ²¢ÐÐÊÓͼÖУ¬Õ¹ÏÖÁËÔÚÁ½¸öOperatorÖ®¼äµÄStreamµÄÁ½ÖÖģʽ£º

One-to-oneģʽ

±ÈÈç´ÓSource[1]µ½map()[1]£¬Ëü±£³ÖÁËSourceµÄ·ÖÇøÌØÐÔ£¨Partitioning£©ºÍ·ÖÇøÄÚÔªËØ´¦ÀíµÄÓÐÐòÐÔ£¬Ò²¾ÍÊÇ˵map()[1]µÄSubtask¿´µ½Êý¾ÝÁ÷ÖмǼµÄ˳Ðò£¬ÓëSource[1]Öп´µ½µÄ¼Ç¼˳ÐòÊÇÒ»Öµġ£

Redistributionģʽ

ÕâÖÖģʽ¸Ä±äÁËÊäÈëÊý¾ÝÁ÷µÄ·ÖÇø£¬±ÈÈç´Ómap()[1]¡¢map()[2]µ½keyBy()/window()/apply()[1]¡¢keyBy()/window()/apply()[2]£¬ÉÏÓεÄSubtaskÏòÏÂÓεĶà¸ö²»Í¬µÄSubtask·¢ËÍÊý¾Ý£¬¸Ä±äÁËÊý¾ÝÁ÷µÄ·ÖÇø£¬ÕâÓëʵ¼ÊÓ¦ÓÃËùÑ¡ÔñµÄOperatorÓйØÏµ¡£

ÁíÍ⣬Source Operator¶ÔÓ¦2¸öSubtask£¬ËùÒÔ²¢ÐжÈΪ2£¬¶øSink OperatorµÄSubtaskÖ»ÓÐ1¸ö£¬¹Ê¶ø²¢ÐжÈΪ1¡£

Task & Operator Chain

ÔÚFlink·Ö²¼Ê½Ö´Ðл·¾³ÖУ¬»á½«¶à¸öOperator Subtask´®ÆðÀ´×é³ÉÒ»¸öOperator Chain£¬Êµ¼ÊÉϾÍÊÇÒ»¸öÖ´ÐÐÁ´£¬Ã¿¸öÖ´ÐÐÁ´»áÔÚTaskManagerÉÏÒ»¸ö¶ÀÁ¢µÄÏß³ÌÖÐÖ´ÐУ¬ÈçÏÂͼËùʾ£º

flink-tasks-chains

ÉÏͼÖÐÉϰ벿·Ö±íʾµÄÊÇÒ»¸öOperator Chain£¬¶à¸öOperatorͨ¹ýStreamÁ¬½Ó£¬¶øÃ¿¸öOperatorÔÚÔËÐÐʱ¶ÔÓ¦Ò»¸öTask£»Í¼ÖÐϰ벿·ÖÊÇÉϰ벿·ÖµÄÒ»¸ö²¢Ðа汾£¬Ò²¾ÍÊǶÔÿһ¸öTask¶¼²¢Ðл¯Îª¶à¸öSubtask¡£

Time & Window

FlinkÖ§³Ö»ùÓÚʱ¼ä´°¿Ú²Ù×÷£¬Ò²Ö§³Ö»ùÓÚÊý¾ÝµÄ´°¿Ú²Ù×÷£¬ÈçÏÂͼËùʾ£º

flink-window

ÉÏͼÖУ¬»ùÓÚʱ¼äµÄ´°¿Ú²Ù×÷£¬ÔÚÿ¸öÏàͬµÄʱ¼ä¼ä¸ô¶ÔStreamÖеļǼ½øÐд¦Àí£¬Í¨³£¸÷¸öʱ¼ä¼ä¸ôÄڵĴ°¿Ú²Ù×÷´¦ÀíµÄ¼Ç¼Êý²»¹Ì¶¨£»¶ø»ùÓÚÊý¾ÝÇý¶¯µÄ´°¿Ú²Ù×÷£¬¿ÉÒÔÔÚStreamÖÐÑ¡Ôñ¹Ì¶¨ÊýÁ¿µÄ¼Ç¼×÷Ϊһ¸ö´°¿Ú£¬¶Ô¸Ã´°¿ÚÖеļǼ½øÐд¦Àí¡£

Óйش°¿Ú²Ù×÷µÄ²»Í¬ÀàÐÍ£¬¿ÉÒÔ·ÖΪÈçϼ¸ÖÖ£ºÇãб´°¿Ú£¨Tumbling Windows£¬¼Ç¼ûÓÐÖØµþ£©¡¢»¬¶¯´°¿Ú£¨Slide Windows£¬¼Ç¼ÓÐÖØµþ£©¡¢»á»°´°¿Ú£¨Session Windows£©£¬¾ßÌå¿ÉÒÔ²éÔÄÏà¹Ø×ÊÁÏ¡£

ÔÚ´¦ÀíStreamÖеļǼʱ£¬¼Ç¼ÖÐͨ³£»á°üº¬¸÷ÖÖµäÐ͵Äʱ¼ä×ֶΣ¬FlinkÖ§³Ö¶àÖÖʱ¼äµÄ´¦Àí£¬ÈçÏÂͼËùʾ£º

flink-event-ingestion-processing-time

ÉÏͼÃèÊöÁËÔÚ»ùÓÚFlinkµÄÁ÷´¦ÀíϵͳÖУ¬¸÷ÖÖ²»Í¬µÄʱ¼äËù´¦µÄλÖúͺ¬Ò壬ÆäÖУ¬Event Time±íʾʼþ´´½¨Ê±¼ä£¬Ingestion Time±íʾʼþ½øÈëµ½Flink DataflowµÄʱ¼ä £¬Processing Time±íʾij¸öOperator¶Ôʼþ½øÐд¦Àíʵı¾µØÏµÍ³Ê±¼ä£¨ÊÇÔÚTaskManager½ÚµãÉÏ£©¡£ÕâÀ̸һÏ»ùÓÚEvent Time½øÐд¦ÀíµÄÎÊÌ⣬ͨ³£¸ù¾ÝEvent Time»á¸øÕû¸öStreamingÓ¦ÓôøÀ´Ò»¶¨µÄÑÓ³ÙÐÔ£¬ÒòΪÔÚÒ»¸ö»ùÓÚʼþµÄ´¦ÀíϵͳÖУ¬½øÈëϵͳµÄʼþ¿ÉÄÜ»á»ùÓÚEvent Time¶ø·¢ÉúÂÒÐòÏÖÏ󣬱ÈÈçʼþÀ´Ô´ÓÚÍⲿµÄ¶à¸öϵͳ£¬ÎªÁËÔöǿʼþ´¦ÀíÍÌÍÂÁ¿»á½«ÊäÈëµÄ¶à¸öStream½øÐÐ×ÔÈ»·ÖÇø£¬Ã¿¸öStream·ÖÇøÄÚ²¿ÓÐÐò£¬µ«ÊÇÒª±£Ö¤È«¾ÖÓÐÐò±ØÐëͬʱ¼æ¹Ë¶à¸öStream·ÖÇøµÄ´¦Àí£¬ÉèÖÃÒ»¶¨µÄʱ¼ä´°¿Ú½øÐÐÔÝ´æÊý¾Ý£¬µ±¶à¸öStream·ÖÇø»ùÓÚEvent TimeÅÅÁÐ¶ÔÆëºó²ÅÄܽøÐÐÑÓ³Ù´¦Àí¡£ËùÒÔ£¬ÉèÖõÄÔÝ´æÊý¾Ý¼Ç¼µÄʱ¼ä´°¿ÚÔ½³¤£¬´¦ÀíÐÔÄÜÔ½²î£¬ÉõÖÁÑÏÖØÓ°ÏìStream´¦ÀíµÄʵʱÐÔ¡£

ÓйػùÓÚʱ¼äµÄStreaming´¦Àí£¬¿ÉÒԲο¼¹Ù·½Îĵµ£¬ÔÚFlinkÖÐ½è¼øÁËGoogleʹÓõÄWaterMarkʵÏÖ·½Ê½£¬¿ÉÒÔ²éÔÄÏà¹Ø×ÊÁÏ¡£

»ù±¾¼Ü¹¹

FlinkϵͳµÄ¼Ü¹¹ÓëSparkÀàËÆ£¬ÊÇÒ»¸ö»ùÓÚMaster-Slave·ç¸ñµÄ¼Ü¹¹£¬ÈçÏÂͼËùʾ£º

flink-system-architecture

Flink¼¯ÈºÆô¶¯Ê±£¬»áÆô¶¯Ò»¸öJobManager½ø³Ì¡¢ÖÁÉÙÒ»¸öTaskManager½ø³Ì¡£ÔÚLocalģʽÏ£¬»áÔÚͬһ¸öJVMÄÚ²¿Æô¶¯Ò»¸öJobManager½ø³ÌºÍTaskManager½ø³Ì¡£µ±Flink³ÌÐòÌá½»ºó£¬»á´´½¨Ò»¸öClientÀ´½øÐÐÔ¤´¦Àí£¬²¢×ª»»ÎªÒ»¸ö²¢ÐÐÊý¾ÝÁ÷£¬ÕâÊǶÔÓ¦×ÅÒ»¸öFlink Job£¬´Ó¶ø¿ÉÒÔ±»JobManagerºÍTaskManagerÖ´ÐС£ÔÚʵÏÖÉÏ£¬Flink»ùÓÚActorʵÏÖÁËJobManagerºÍTaskManager£¬ËùÒÔJobManagerÓëTaskManagerÖ®¼äµÄÐÅÏ¢½»»»£¬¶¼ÊÇͨ¹ýʼþµÄ·½Ê½À´½øÐд¦Àí¡£

ÈçÉÏͼËùʾ£¬FlinkϵͳÖ÷Òª°üº¬ÈçÏÂ3¸öÖ÷ÒªµÄ½ø³Ì£º

JobManager

JobManagerÊÇFlinkϵͳµÄЭµ÷Õߣ¬Ëü¸ºÔð½ÓÊÕFlink Job£¬µ÷¶È×é³ÉJobµÄ¶à¸öTaskµÄÖ´ÐС£Í¬Ê±£¬JobManager»¹¸ºÔðÊÕ¼¯JobµÄ״̬ÐÅÏ¢£¬²¢¹ÜÀíFlink¼¯ÈºÖдӽڵãTaskManager¡£JobManagerËù¸ºÔðµÄ¸÷Ïî¹ÜÀí¹¦ÄÜ£¬Ëü½ÓÊÕµ½²¢´¦ÀíµÄʼþÖ÷Òª°üÀ¨£º

RegisterTaskManager

ÔÚFlink¼¯ÈºÆô¶¯µÄʱºò£¬TaskManager»áÏòJobManager×¢²á£¬Èç¹û×¢²á³É¹¦£¬ÔòJobManager»áÏòTaskManager»Ø¸´ÏûÏ¢AcknowledgeRegistration¡£

SubmitJob

Flink³ÌÐòÄÚ²¿Í¨¹ýClientÏòJobManagerÌá½»Flink Job£¬ÆäÖÐÔÚÏûÏ¢SubmitJobÖÐÒÔJobGraphÐÎʽÃèÊöÁËJobµÄ»ù±¾ÐÅÏ¢¡£

CancelJob

ÇëÇóÈ¡ÏûÒ»¸öFlink JobµÄÖ´ÐУ¬CancelJobÏûÏ¢Öаüº¬ÁËJobµÄID£¬Èç¹û³É¹¦Ôò·µ»ØÏûÏ¢CancellationSuccess£¬Ê§°ÜÔò·µ»ØÏûÏ¢CancellationFailure¡£

UpdateTaskExecutionState

TaskManager»áÏòJobManagerÇëÇó¸üÐÂExecutionGraphÖеÄExecutionVertexµÄ״̬ÐÅÏ¢£¬¸üгɹ¦Ôò·µ»Øtrue¡£

RequestNextInputSplit

ÔËÐÐÔÚTaskManagerÉÏÃæµÄTask£¬ÇëÇó»ñÈ¡ÏÂÒ»¸öÒª´¦ÀíµÄÊäÈëSplit£¬³É¹¦Ôò·µ»ØNextInputSplit¡£

JobStatusChanged

ExecutionGraphÏòJobManager·¢Ë͸ÃÏûÏ¢£¬ÓÃÀ´±íʾFlink JobµÄ״̬·¢ÉúµÄ±ä»¯£¬ÀýÈ磺RUNNING¡¢CANCELING¡¢FINISHEDµÈ¡£

TaskManager

TaskManagerÒ²ÊÇÒ»¸öActor£¬ËüÊÇʵ¼Ê¸ºÔðÖ´ÐмÆËãµÄWorker£¬ÔÚÆäÉÏÖ´ÐÐFlink JobµÄÒ»×éTask¡£Ã¿¸öTaskManager¸ºÔð¹ÜÀíÆäËùÔÚ½ÚµãÉϵÄ×ÊÔ´ÐÅÏ¢£¬ÈçÄÚ´æ¡¢´ÅÅÌ¡¢ÍøÂ磬ÔÚÆô¶¯µÄʱºò½«×ÊÔ´µÄ״̬ÏòJobManager»ã±¨¡£TaskManager¶Ë¿ÉÒÔ·Ö³ÉÁ½¸ö½×¶Î£º

×¢²á½×¶Î

TaskManager»áÏòJobManager×¢²á£¬·¢ËÍRegisterTaskManagerÏûÏ¢£¬µÈ´ýJobManager·µ»ØAcknowledgeRegistration£¬È»ºóTaskManager¾Í¿ÉÒÔ½øÐгõʼ»¯¹ý³Ì¡£

¿É²Ù×÷½×¶Î

¸Ã½×¶ÎTaskManager¿ÉÒÔ½ÓÊÕ²¢´¦ÀíÓëTaskÓйصÄÏûÏ¢£¬ÈçSubmitTask¡¢CancelTask¡¢FailTask¡£Èç¹ûTaskManagerÎÞ·¨Á¬½Óµ½JobManager£¬ÕâÊÇTaskManager¾ÍʧȥÁËÓëJobManagerµÄÁªÏµ£¬»á×Ô¶¯½øÈë¡°×¢²á½×¶Î¡±£¬Ö»ÓÐÍê³É×¢²á²ÅÄܼÌÐø´¦ÀíTaskÏà¹ØµÄÏûÏ¢¡£

Client

µ±Óû§Ìá½»Ò»¸öFlink³ÌÐòʱ£¬»áÊ×ÏÈ´´½¨Ò»¸öClient£¬¸ÃClientÊ×ÏÈ»á¶ÔÓû§Ìá½»µÄFlink³ÌÐò½øÐÐÔ¤´¦Àí£¬²¢Ìá½»µ½Flink¼¯ÈºÖд¦Àí£¬ËùÒÔClientÐèÒª´ÓÓû§Ìá½»µÄFlink³ÌÐòÅäÖÃÖлñÈ¡JobManagerµÄµØÖ·£¬²¢½¨Á¢µ½JobManagerµÄÁ¬½Ó£¬½«Flink JobÌá½»¸øJobManager¡£Client»á½«Óû§Ìá½»µÄFlink³ÌÐò×é×°Ò»¸öJobGraph£¬ ²¢ÇÒÊÇÒÔJobGraphµÄÐÎʽÌá½»µÄ¡£Ò»¸öJobGraphÊÇÒ»¸öFlink Dataflow£¬ËüÓɶà¸öJobVertex×é³ÉµÄDAG¡£ÆäÖУ¬Ò»¸öJobGraph°üº¬ÁËÒ»¸öFlink³ÌÐòµÄÈçÏÂÐÅÏ¢£ºJobID¡¢JobÃû³Æ¡¢ÅäÖÃÐÅÏ¢¡¢Ò»×éJobVertexµÈ¡£

×é¼þÕ»

FlinkÊÇÒ»¸ö·Ö²ã¼Ü¹¹µÄϵͳ£¬Ã¿Ò»²ãËù°üº¬µÄ×é¼þ¶¼ÌṩÁËÌØ¶¨µÄ³éÏó£¬ÓÃÀ´·þÎñÓÚÉϲã×é¼þ¡£Flink·Ö²ãµÄ×é¼þÕ»ÈçÏÂͼËùʾ£º

flink-component-stack

ÏÂÃæ£¬ÎÒÃÇ×Ô϶øÉÏ£¬·Ö±ðÕë¶Ôÿһ²ã½øÐнâÊÍ˵Ã÷£º

Deployment²ã

¸Ã²ãÖ÷񻃾¼°ÁËFlinkµÄ²¿Êðģʽ£¬FlinkÖ§³Ö¶àÖÖ²¿Êðģʽ£º±¾µØ¡¢¼¯Èº£¨Standalone/YARN£©¡¢ÔÆ£¨GCE/EC2£©¡£Standalone²¿ÊðģʽÓëSparkÀàËÆ£¬ÕâÀÎÒÃÇ¿´Ò»ÏÂFlink on YARNµÄ²¿Êðģʽ£¬ÈçÏÂͼËùʾ£º

flink-on-yarn

Á˽âYARNµÄ»°£¬¶ÔÉÏͼµÄÔ­Àí·Ç³£ÊìϤ£¬Êµ¼ÊFlinkҲʵÏÖÁËÂú×ãÔÚYARN¼¯ÈºÉÏÔËÐеĸ÷¸ö×é¼þ£ºFlink YARN Client¸ºÔðÓëYARN RMͨÐÅЭÉÌ×ÊÔ´ÇëÇó£¬Flink JobManagerºÍFlink TaskManager·Ö±ðÉêÇëµ½ContainerÈ¥ÔËÐи÷×ԵĽø³Ì¡£Í¨¹ýÉÏͼ¿ÉÒÔ¿´µ½£¬YARN AMÓëFlink JobManagerÔÚͬһ¸öContainerÖУ¬ÕâÑùAM¿ÉÒÔÖªµÀFlink JobManagerµÄµØÖ·£¬´Ó¶øAM¿ÉÒÔÉêÇëContainerÈ¥Æô¶¯Flink TaskManager¡£´ýFlink³É¹¦ÔËÐÐÔÚYARN¼¯ÈºÉÏ£¬Flink YARN Client¾Í¿ÉÒÔÌá½»Flink Jobµ½Flink JobManager£¬²¢½øÐкóÐøµÄÓ³Éä¡¢µ÷¶ÈºÍ¼ÆËã´¦Àí¡£

Runtime²ã

Runtime²ãÌṩÁËÖ§³ÖFlink¼ÆËãµÄÈ«²¿ºËÐÄʵÏÖ£¬±ÈÈ磺֧³Ö·Ö²¼Ê½Stream´¦Àí¡¢JobGraphµ½ExecutionGraphµÄÓ³Éä¡¢µ÷¶ÈµÈµÈ£¬ÎªÉϲãAPI²ãÌṩ»ù´¡·þÎñ¡£

API²ã

API²ãÖ÷ҪʵÏÖÁËÃæÏòÎÞ½çStreamµÄÁ÷´¦ÀíºÍÃæÏòBatchµÄÅú´¦ÀíAPI£¬ÆäÖÐÃæÏòÁ÷´¦Àí¶ÔÓ¦DataStream API£¬ÃæÏòÅú´¦Àí¶ÔÓ¦DataSet API¡£

Libraries²ã

¸Ã²ãÒ²¿ÉÒÔ³ÆÎªFlinkÓ¦Óÿò¼Ü²ã£¬¸ù¾ÝAPI²ãµÄ»®·Ö£¬ÔÚAPI²ãÖ®ÉϹ¹½¨µÄÂú×ãÌØ¶¨Ó¦ÓõÄʵÏÖ¼ÆËã¿ò¼Ü£¬Ò²·Ö±ð¶ÔÓ¦ÓÚÃæÏòÁ÷´¦ÀíºÍÃæÏòÅú´¦ÀíÁ½Àà¡£ÃæÏòÁ÷´¦ÀíÖ§³Ö£ºCEP£¨¸´ÔÓʼþ´¦Àí£©¡¢»ùÓÚSQL-likeµÄ²Ù×÷£¨»ùÓÚTableµÄ¹ØÏµ²Ù×÷£©£»ÃæÏòÅú´¦ÀíÖ§³Ö£ºFlinkML£¨»úÆ÷ѧϰ¿â£©¡¢Gelly£¨Í¼´¦Àí£©¡£

ÄÚ²¿Ô­Àí

ÈÝ´í»úÖÆ

Flink»ùÓÚCheckpoint»úÖÆÊµÏÖÈÝ´í£¬ËüµÄÔ­ÀíÊDz»¶ÏµØÉú³É·Ö²¼Ê½StreamingÊý¾ÝÁ÷Snapshot¡£ÔÚÁ÷´¦Àíʧ°Üʱ£¬Í¨¹ýÕâЩSnapshot¿ÉÒÔ»Ö¸´Êý¾ÝÁ÷´¦Àí¡£Àí½âFlinkµÄÈÝ´í»úÖÆ£¬Ê×ÏÈÐèÒªÁ˽âÒ»ÏÂBarrierÕâ¸ö¸ÅÄ

Stream BarrierÊÇFlink·Ö²¼Ê½SnapshottingÖеĺËÐÄÔªËØ£¬Ëü»á×÷ΪÊý¾ÝÁ÷µÄ¼Ç¼±»Í¬µÈ¿´´ý£¬±»²åÈëµ½Êý¾ÝÁ÷ÖУ¬½«Êý¾ÝÁ÷ÖмǼµÄ½øÐзÖ×飬²¢ÑØ×ÅÊý¾ÝÁ÷µÄ·½ÏòÏòÇ°ÍÆ½ø¡£Ã¿¸öBarrier»áЯ´øÒ»¸öSnapshot ID£¬ÊôÓÚ¸ÃSnapshotµÄ¼Ç¼»á±»ÍÆÏò¸ÃBarrierµÄǰ·½¡£ÒòΪBarrier·Ç³£ÇáÁ¿£¬ËùÒÔ²¢²»»áÖжÏÊý¾ÝÁ÷¡£´øÓÐBarrierµÄÊý¾ÝÁ÷£¬ÈçÏÂͼËùʾ£º

flink-stream-barriers

»ùÓÚÉÏͼ£¬ÎÒÃÇͨ¹ýÈçÏÂÒªµãÀ´ËµÃ÷£º

³öÏÖÒ»¸öBarrier£¬ÔÚ¸ÃBarrier֮ǰ³öÏֵļǼ¶¼ÊôÓÚ¸ÃBarrier¶ÔÓ¦µÄSnapshot£¬ÔÚ¸ÃBarrierÖ®ºó³öÏֵļǼÊôÓÚÏÂÒ»¸öSnapshot

À´×Ô²»Í¬Snapshot¶à¸öBarrier¿ÉÄÜͬʱ³öÏÖÔÚÊý¾ÝÁ÷ÖУ¬Ò²¾ÍÊÇ˵ͬһ¸öʱ¿Ì¿ÉÄܲ¢·¢Éú³É¶à¸öSnapshot

µ±Ò»¸öÖм䣨Intermediate£©Operator½ÓÊÕµ½Ò»¸öBarrierºó£¬Ëü»á·¢ËÍBarrierµ½ÊôÓÚ¸ÃBarrierµÄSnapshotµÄÊý¾ÝÁ÷ÖУ¬µÈµ½Sink Operator½ÓÊÕµ½¸ÃBarrierºó»áÏòCheckpoint CoordinatorÈ·ÈϸÃSnapshot£¬Ö±µ½ËùÓеÄSink Operator¶¼È·ÈÏÁ˸ÃSnapshot£¬²Å±»ÈÏΪÍê³ÉÁ˸ÃSnapshot

ÕâÀﻹÐèҪǿµ÷µÄÊÇ£¬Snapshot²¢²»½ö½öÊǶÔÊý¾ÝÁ÷×öÁËÒ»¸ö״̬µÄCheckpoint£¬ËüÒ²°üº¬ÁËÒ»¸öOperatorÄÚ²¿Ëù³ÖÓеÄ״̬£¬ÕâÑù²ÅÄܹ»ÔÚ±£Ö¤ÔÚÁ÷´¦Àíϵͳʧ°ÜʱÄܹ»ÕýÈ·µØ»Ö¸´Êý¾ÝÁ÷´¦Àí¡£Ò²¾ÍÊÇ˵£¬Èç¹ûÒ»¸öOperator°üº¬ÈκÎÐÎʽµÄ״̬£¬ÕâÖÖ״̬±ØÐëÊÇSnapshotµÄÒ»²¿·Ö¡£

OperatorµÄ״̬°üº¬Á½ÖÖ£ºÒ»ÖÖÊÇϵͳ״̬£¬Ò»¸öOperator½øÐмÆËã´¦ÀíµÄʱºòÐèÒª¶ÔÊý¾Ý½øÐлº³å£¬ËùÒÔÊý¾Ý»º³åÇøµÄ״̬ÊÇÓëOperatorÏà¹ØÁªµÄ£¬ÒÔ´°¿Ú²Ù×÷µÄ»º³åÇøÎªÀý£¬Flinkϵͳ»áÊÕ¼¯»ò¾ÛºÏ¼Ç¼Êý¾Ý²¢·Åµ½»º³åÇøÖУ¬Ö±µ½¸Ã»º³åÇøÖеÄÊý¾Ý±»´¦ÀíÍê³É£»ÁíÒ»ÖÖÊÇÓû§×Ô¶¨Òå״̬£¨×´Ì¬¿ÉÒÔͨ¹ýת»»º¯Êý½øÐд´½¨ºÍÐ޸ģ©£¬Ëü¿ÉÒÔÊǺ¯ÊýÖеÄJava¶ÔÏóÕâÑùµÄ¼òµ¥±äÁ¿£¬Ò²¿ÉÒÔÊÇÓ뺯ÊýÏà¹ØµÄKey/Value״̬¡£

¶ÔÓÚ¾ßÓÐÇá΢״̬µÄStreamingÓ¦Ó㬻áÉú³É·Ç³£ÇáÁ¿µÄSnapshot¶øÇҷdz£Æµ·±£¬µ«²¢²»»áÓ°ÏìÊý¾ÝÁ÷´¦ÀíÐÔÄÜ¡£StreamingÓ¦ÓõÄ״̬»á±»´æ´¢µ½Ò»¸ö¿ÉÅäÖõĴ洢ϵͳÖУ¬ÀýÈçHDFS¡£ÔÚÒ»¸öCheckpointÖ´Ðйý³ÌÖУ¬´æ´¢µÄ״̬ÐÅÏ¢¼°Æä½»»¥¹ý³Ì£¬ÈçÏÂͼËùʾ£º

flink-checkpointing

ÔÚCheckpoint¹ý³ÌÖУ¬»¹ÓÐÒ»¸ö±È½ÏÖØÒªµÄ²Ù×÷¡ª¡ªStream Aligning¡£µ±Operator½ÓÊÕµ½¶à¸öÊäÈëµÄÊý¾ÝÁ÷ʱ£¬ÐèÒªÔÚSnapshot BarrierÖжÔÊý¾ÝÁ÷½øÐÐÅÅÁÐ¶ÔÆë£¬ÈçÏÂͼËùʾ£º

flink-stream-aligning

¾ßÌåÅÅÁйý³ÌÈçÏ£º

Operator´ÓÒ»¸öincoming Stream½ÓÊÕµ½Snapshot Barrier n£¬È»ºóÔÝÍ£´¦Àí£¬Ö±µ½ÆäËüµÄincoming StreamµÄBarrier n£¨·ñÔòÊôÓÚ2¸öSnapshotµÄ¼Ç¼¾Í»ìÔÚÒ»ÆðÁË£©µ½´ï¸ÃOperator

½ÓÊÕµ½Barrier nµÄStream±»ÁÙʱ¸éÖã¬À´×ÔÕâЩStreamµÄ¼Ç¼²»»á±»´¦Àí£¬¶øÊDZ»·ÅÔÚÒ»¸öBufferÖÐ

Ò»µ©×îºóÒ»¸öStream½ÓÊÕµ½Barrier n£¬Operator»áemitËùÓÐÔÝ´æÔÚBufferÖеļǼ£¬È»ºóÏòCheckpoint Coordinator·¢ËÍSnapshot n

¼ÌÐø´¦ÀíÀ´×Ô¶à¸öStreamµÄ¼Ç¼

»ùÓÚStream Aligning²Ù×÷Äܹ»ÊµÏÖExactly OnceÓïÒ壬µ«ÊÇÒ²»á¸øÁ÷´¦ÀíÓ¦ÓôøÀ´ÑÓ³Ù£¬ÒòΪΪÁËÅÅÁÐ¶ÔÆëBarrier£¬»áÔÝʱ»º´æÒ»²¿·ÖStreamµÄ¼Ç¼µ½BufferÖУ¬ÓÈÆäÊÇÔÚÊý¾ÝÁ÷²¢ÐжȺܸߵij¡¾°Ï¿ÉÄܸü¼ÓÃ÷ÏÔ£¬Í¨³£ÒÔ×î³Ù¶ÔÆëBarrierµÄÒ»¸öStreamΪ´¦ÀíBufferÖлº´æ¼Ç¼µÄʱ¿Ìµã¡£ÔÚFlinkÖУ¬ÌṩÁËÒ»¸ö¿ª¹Ø£¬Ñ¡ÔñÊÇ·ñʹÓÃStream Aligning£¬Èç¹û¹ØµôÔòExactly Once»á±ä³ÉAt least once¡£

µ÷¶È»úÖÆ

ÔÚJobManager¶Ë£¬»á½ÓÊÕµ½ClientÌá½»µÄJobGraphÐÎʽµÄFlink Job£¬JobManager»á½«Ò»¸öJobGraphת»»Ó³ÉäΪһ¸öExecutionGraph£¬ÈçÏÂͼËùʾ£º

flink-job-and-execution-graph

ͨ¹ýÉÏͼ¿ÉÒÔ¿´³ö£º

JobGraphÊÇÒ»¸öJobµÄÓû§Âß¼­ÊÓͼ±íʾ£¬½«Ò»¸öÓû§Òª¶ÔÊý¾ÝÁ÷½øÐеĴ¦Àí±íʾΪµ¥¸öDAGͼ£¨¶ÔÓ¦ÓÚJobGraph£©£¬DAGͼÓɶ¥µã£¨JobVertex£©ºÍÖмä½á¹û¼¯£¨IntermediateDataSet£©×é³É£¬ÆäÖÐJobVertex±íʾÁ˶ÔÊý¾ÝÁ÷½øÐеÄת»»²Ù×÷£¬±ÈÈçmap¡¢flatMap¡¢filter¡¢keyByµÈ²Ù×÷£¬¶øIntermediateDataSetÊÇÓÉÉÏÓεÄJobVertexËùÉú³É£¬Í¬Ê±×÷ΪÏÂÓεÄJobVertexµÄÊäÈë¡£

¶øExecutionGraphÊÇJobGraphµÄ²¢Ðбíʾ£¬Ò²¾ÍÊÇʵ¼ÊJobManagerµ÷¶ÈÒ»¸öJobÔÚTaskManagerÉÏÔËÐеÄÂß¼­ÊÓͼ£¬ËüÒ²ÊÇÒ»¸öDAGͼ£¬ÊÇÓÉExecutionJobVertex¡¢IntermediateResult£¨»òIntermediateResultPartition£©×é³É£¬ExecutionJobVertexʵ¼Ê¶ÔÓ¦ÓÚJobGraphͼÖеÄJobVertex£¬Ö»²»¹ýÔÚExecutionJobVertexÄÚ²¿ÊÇÒ»ÖÖ²¢Ðбíʾ£¬Óɶà¸ö²¢ÐеÄExecutionVertexËù×é³É¡£ÁíÍ⣬ÕâÀﻹÓÐÒ»¸öÖØÒªµÄ¸ÅÄ¾ÍÊÇExecution£¬ËüÊÇÒ»¸öExecutionVertexµÄÒ»´ÎÔËÐÐAttempt£¬Ò²¾ÍÊÇ˵£¬Ò»¸öExecutionVertex¿ÉÄܶÔÓ¦¶à¸öÔËÐÐ״̬µÄExecution£¬±ÈÈ磬һ¸öExecutionVertexÔËÐвúÉúÁËÒ»¸öʧ°ÜµÄExecution£¬È»ºó»¹»á´´½¨Ò»¸öеÄExecutionÀ´ÔËÐУ¬Õâʱ¾Í¶ÔÓ¦Õâ¸ö2´ÎÔËÐÐAttempt¡£Ã¿¸öExecutionͨ¹ýExecutionAttemptIDÀ´Î¨Ò»±êʶ£¬ÔÚTaskManagerºÍJobManagerÖ®¼ä½øÐÐTask״̬µÄ½»»»¶¼ÊÇͨ¹ýExecutionAttemptIDÀ´ÊµÏֵġ£

ÏÂÃæ¿´Ò»Ï£¬ÔÚÎïÀíÉϽøÐе÷¶È£¬»ùÓÚ×ÊÔ´µÄ·ÖÅäÓëʹÓõÄÒ»¸öÀý×Ó£¬À´×Ô¹ÙÍø£¬ÈçÏÂͼËùʾ£º

flink-scheduled-task-slots

˵Ã÷ÈçÏ£º

×óÉÏ×Óͼ£ºÓÐ2¸öTaskManager£¬Ã¿¸öTaskManagerÓÐ3¸öTask Slot

×óÏÂ×Óͼ£ºÒ»¸öFlink Job£¬Âß¼­Éϰüº¬ÁË1¸ödata source¡¢1¸öMapFunction¡¢1¸öReduceFunction£¬¶ÔÓ¦Ò»¸öJobGraph

×óÏÂ×Óͼ£ºÓû§Ìá½»µÄFlink Job¶Ô¸÷¸öOperator½øÐеÄÅäÖ᪡ªdata sourceµÄ²¢ÐжÈÉèÖÃΪ4£¬MapFunctionµÄ²¢ÐжÈҲΪ4£¬ReduceFunctionµÄ²¢ÐжÈΪ3£¬ÔÚJobManager¶Ë¶ÔÓ¦ÓÚExecutionGraph

ÓÒÉÏ×Óͼ£ºTaskManager 1ÉÏ£¬ÓÐ2¸ö²¢ÐеÄExecutionVertex×é³ÉµÄDAGͼ£¬ËüÃǸ÷Õ¼ÓÃÒ»¸öTask Slot

ÓÒÏÂ×Óͼ£ºTaskManager 2ÉÏ£¬Ò²ÓÐ2¸ö²¢ÐеÄExecutionVertex×é³ÉµÄDAGͼ£¬ËüÃÇÒ²¸÷Õ¼ÓÃÒ»¸öTask Slot

ÔÚ2¸öTaskManagerÉÏÔËÐеÄ4¸öExecutionÊDz¢ÐÐÖ´ÐеÄ

µü´ú»úÖÆ

»úÆ÷ѧϰºÍͼ¼ÆËãÓ¦Ó㬶¼»áʹÓõ½µü´ú¼ÆË㣬Flinkͨ¹ýÔÚµü´úOperatorÖж¨ÒåStepº¯ÊýÀ´ÊµÏÖµü´úËã·¨£¬ÕâÖÖµü´úËã·¨°üÀ¨IterateºÍDelta IterateÁ½ÖÖÀàÐÍ£¬ÔÚʵÏÖÉÏËüÃÇ·´¸´µØÔÚµ±Ç°µü´ú״̬Éϵ÷ÓÃStepº¯Êý£¬Ö±µ½Âú×ã¸ø¶¨µÄÌõ¼þ²Å»áÍ£Ö¹µü´ú¡£ÏÂÃæ£¬¶ÔIterateºÍDelta IterateÁ½ÖÖÀàÐ͵ĵü´úËã·¨Ô­Àí½øÐÐ˵Ã÷£º

Iterate

Iterate OperatorÊÇÒ»ÖÖ¼òµ¥µÄµü´úÐÎʽ£ºÃ¿Ò»ÂÖµü´ú£¬Stepº¯ÊýµÄÊäÈë»òÕßÊÇÊäÈëµÄÕû¸öÊý¾Ý¼¯£¬»òÕßÊÇÉÏÒ»ÂÖµü´úµÄ½á¹û£¬Í¨¹ý¸ÃÂÖµü´ú¼ÆËã³öÏÂÒ»ÂÖ¼ÆËãËùÐèÒªµÄÊäÈ루Ҳ³ÆÎªNext Partial Solution£©£¬Âú×ãµü´úµÄÖÕÖ¹Ìõ¼þºó£¬»áÊä³ö×îÖÕµü´ú½á¹û£¬¾ßÌåÖ´ÐÐÁ÷³ÌÈçÏÂͼËùʾ£º

flink-iterations-iterate-operator

Stepº¯ÊýÔÚÿһÂÖµü´úÖж¼»á±»Ö´ÐУ¬Ëü¿ÉÒÔÊÇÓÉmap¡¢reduce¡¢joinµÈOperator×é³ÉµÄÊý¾ÝÁ÷¡£ÏÂÃæÍ¨¹ý¹ÙÍø¸ø³öµÄÒ»¸öÀý×ÓÀ´ËµÃ÷Iterate Operator£¬·Ç³£¼òµ¥Ö±¹Û£¬ÈçÏÂͼËùʾ£º

flink-iterations-iterate-operator-example

ÉÏÃæµü´ú¹ý³ÌÖУ¬ÊäÈëÊý¾ÝΪ1µ½5µÄÊý×Ö£¬Stepº¯Êý¾ÍÊÇÒ»¸ö¼òµ¥µÄmapº¯Êý£¬»á¶Ôÿ¸öÊäÈëµÄÊý×Ö½øÐмÓ1´¦Àí£¬¶øNext Partial Solution¶ÔÓ¦ÓÚ¾­¹ýmapº¯Êý´¦ÀíºóµÄ½á¹û£¬±ÈÈçµÚÒ»ÂÖµü´ú£¬¶ÔÊäÈëµÄÊý×Ö1¼Ó1ºó½á¹ûΪ2£¬¶ÔÊäÈëµÄÊý×Ö2¼Ó1ºó½á¹ûΪ3£¬Ö±µ½¶ÔÊäÈëÊý×Ö5¼Ó1ºó½á¹ûΪ±äΪ6£¬ÕâЩÐÂÉú³É½á¹ûÊý×Ö2~6»á×÷ΪµÚ¶þÂÖµü´úµÄÊäÈë¡£µü´úÖÕÖ¹Ìõ¼þΪ½øÐÐ10ÂÖµü´ú£¬Ôò×îÖյĽá¹ûΪ11~15¡£

Delta Iterate

Delta Iterate OperatorʵÏÖÁËÔöÁ¿µü´ú£¬ËüµÄʵÏÖÔ­ÀíÈçÏÂͼËùʾ£º

flink-iterations-delta-iterate-operator

»ùÓÚDelta Iterate OperatorʵÏÖÔöÁ¿µü´ú£¬ËüÓÐ2¸öÊäÈ룬ÆäÖÐÒ»¸öÊdzõʼWorkset£¬±íʾÊäÈë´ý´¦ÀíµÄÔöÁ¿StreamÊý¾Ý£¬ÁíÒ»¸öÊdzõʼSolution Set£¬ËüÊǾ­¹ýStream·½ÏòÉÏOperator´¦Àí¹ýµÄ½á¹û¡£µÚÒ»ÂÖµü´ú»á½«Stepº¯Êý×÷ÓÃÔÚ³õʼWorksetÉÏ£¬µÃµ½µÄ¼ÆËã½á¹ûWorkset×÷ΪÏÂÒ»ÂÖµü´úµÄÊäÈ룬ͬʱ»¹ÒªÔöÁ¿¸üгõʼSolution Set¡£Èç¹û·´¸´µü´úÖªµÀÂú×ãµü´úÖÕÖ¹Ìõ¼þ£¬×îºó»á¸ù¾ÝSolution SetµÄ½á¹û£¬Êä³ö×îÖÕµü´ú½á¹û¡£

±ÈÈ磬ÎÒÃÇÏÖÔÚÒÑÖªÒ»¸öSolution¼¯ºÏÖб£´æµÄÊÇ£¬ÒÑÓеÄÉÌÆ··ÖÀà´óÀàÖйºÂòÁ¿×î¶àµÄÉÌÆ·£¬¶øWorksetÊäÈëµÄÊÇÀ´×ÔÏßÉÏʵʱ½»Ò×ÖÐ×îдï³É¹ºÂòµÄÉÌÆ·µÄÈËÊý£¬¾­¹ý¼ÆËã»áÉú³ÉеÄÉÌÆ··ÖÀà´óÀàÖÐÉÌÆ·¹ºÂòÁ¿×î¶àµÄ½á¹û£¬Èç¹ûijЩ´óÀàÖÐÉÌÆ·¹ºÂòÁ¿Í»È»Ôö³¤£¬ËüÐèÒª¸üÐÂSolution SetÖеĽá¹û£¨Ô­À´¹ºÂòÁ¿×î¶àµÄÉÌÆ·£¬¾­¹ýÔöÁ¿µü´ú¼ÆË㣬¿ÉÄÜÒѾ­²»ÊÇ×î¶à£©£¬×îºó»áÊä³ö×îÖÕÉÌÆ··ÖÀà´óÀàÖйºÂòÁ¿×î¶àµÄÉÌÆ·½á¹û¼¯ºÏ¡£¸üÏêϸµÄÀý×Ó£¬¿ÉÒԲο¼¹ÙÍø¸ø³öµÄ¡°Propagate Minimum in Graph¡±£¬ÕâÀï²»ÔÙÀÛÊö¡£

Backpressure¼à¿Ø

BackpressureÔÚÁ÷ʽ¼ÆËãϵͳÖлá±È½ÏÊܵ½¹Ø×¢£¬ÒòΪÔÚÒ»¸öStreamÉϽøÐд¦ÀíµÄ¶à¸öOperatorÖ®¼ä£¬ËüÃÇ´¦ÀíËٶȺͷ½Ê½¿ÉÄܷdz£²»Í¬£¬ËùÒԾʹæÔÚÉÏÓÎOperatorÈç¹û´¦ÀíËٶȹý¿ì£¬ÏÂÓÎOperator´¦¿ÉÄÜ»ú»á¶Ñ»ýStream¼Ç¼£¬ÑÏÖØ»áÔì³É´¦ÀíÑÓ³Ù»òÏÂÓÎOperator¸ºÔعýÖØ¶ø±ÀÀ££¨ÓÐЩϵͳ¿ÉÄܻᶪʧÊý¾Ý£©¡£Òò´Ë£¬¶ÔÏÂÓÎOperator´¦ÀíËٶȸú²»ÉϵÄÇé¿ö£¬Èç¹ûÏÂÓÎOperatorÄܹ»½«×Ô¼º´¦Àí״̬´«²¥¸øÉÏÓÎOperator£¬Ê¹µÃÉÏÓÎOperator´¦ÀíËÙ¶ÈÂýÏÂÀ´¾Í»á»º½âÉÏÊöÎÊÌ⣬±ÈÈçͨ¹ý¸æ¾¯µÄ·½Ê½Í¨ÖªÏÖÓÐÁ÷´¦Àíϵͳ´æÔÚµÄÎÊÌâ¡£

Flink Web½çÃæÉÏÌṩÁ˶ÔÔËÐÐJobµÄBackpressureÐÐΪµÄ¼à¿Ø£¬Ëüͨ¹ýʹÓÃSamplingÏ̶߳ÔÕýÔÚÔËÐеÄTask½øÐжÑÕ»¸ú×Ù²ÉÑùÀ´ÊµÏÖ£¬¾ßÌåʵÏÖ·½Ê½ÈçÏÂͼËùʾ£º

flink-back-pressure-sampling

JobManager»á·´¸´µ÷ÓÃÒ»¸öJobµÄTaskÔËÐÐËùÔÚÏ̵߳ÄThread.getStackTrace()£¬Ä¬ÈÏÇé¿öÏ£¬JobManager»áÿ¼ä¸ô50ms´¥·¢¶ÔÒ»¸öJobµÄÿ¸öTaskÒÀ´Î½øÐÐ100´Î¶ÑÕ»¸ú×Ùµ÷Ó㬸ù¾Ýµ÷Óõ÷Óýá¹ûÀ´È·¶¨Backpressure£¬FlinkÊÇͨ¹ý¼ÆËãµÃµ½Ò»¸ö±ÈÖµ£¨Radio£©À´È·¶¨µ±Ç°ÔËÐÐJobµÄBackpressure״̬¡£ÔÚWeb½çÃæÉÏ¿ÉÒÔ¿´µ½Õâ¸öRadioÖµ£¬Ëü±íʾÔÚÒ»¸öÄÚ²¿·½·¨µ÷ÓÃÖÐ×èÈû£¨Stuck£©µÄ¶ÑÕ»¸ú×Ù´ÎÊý£¬ÀýÈ磬radio=0.01£¬±íʾ100´ÎÖнöÓÐ1´Î·½·¨µ÷ÓÃ×èÈû¡£FlinkĿǰ¶¨ÒåÁËÈçÏÂBackpressure״̬£º

OK: 0 <= Ratio <= 0.10

LOW: 0.10 < Ratio <= 0.5

HIGH: 0.5 < Ratio <= 1

ÁíÍ⣬Flink»¹ÌṩÁË3¸ö²ÎÊýÀ´ÅäÖÃBackpressure¼à¿ØÐÐΪ£º

²ÎÊýÃû³Æ ĬÈÏÖµ ˵Ã÷

jobmanager.web.backpressure.refresh-interval 60000 ĬÈÏ1·ÖÖÓ£¬±íʾ²ÉÑùͳ¼Æ½á¹ûË¢ÐÂʱ¼ä¼ä¸ô

jobmanager.web.backpressure.num-samples 100 ÆÀ¹ÀBackpressure״̬£¬ËùʹÓõĶÑÕ»¸ú×Ùµ÷ÓôÎÊý

jobmanager.web.backpressure.delay-between-samples 50 ĬÈÏ50ºÁÃ룬±íʾ¶ÔÒ»¸öJobµÄÿ¸öTaskÒÀ´Îµ÷ÓõÄʱ¼ä¼ä¸ô

ͨ¹ýÉÏÃæ¸ö¶¨ÒåµÄBackpressure״̬£¬ÒÔ¼°µ÷ÕûÏàÓ¦µÄ²ÎÊý£¬¿ÉÒÔÈ·¶¨µ±Ç°ÔËÐеÄJobµÄ״̬ÊÇ·ñÕý³££¬²¢ÇÒ±£Ö¤²»Ó°ÏìJobManagerÌṩ·þÎñ¡£

   
4918 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þµÄ˼¿¼
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS
Ïà¹ØÅàѵ¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
Windows Azure ÔÆ¼ÆËãÓ¦ÓÃ

ĦÍÐÂÞÀ­ ÔÆÆ½Ì¨µÄ¹¹½¨ÓëÓ¦ÓÃ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ù
ijÑз¢ÖÐÐÄ Openstackʵ¼ù
ÖªÃûµç×Ó¹«Ë¾ ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦ÓÃ
ijµçÁ¦ÐÐÒµ »ùÓÚÔÆÆ½Ì¨¹¹½¨ÔÆ·þÎñ
ÔÆ¼ÆËãÓëWindows AzureÅàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ