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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÔÚÁ÷ʽϵͳÖÐÈçºÎÒýÈë Watermark Ö§³Ö£ºÒÔ Pravega ºÍ Flink ΪÀý
 
×÷ÕߣºTom Kaitchuck¡¢Flavio Junqueira¡¢ëøêÅ¡¢²Ì³¬Ç°
 
  1629  次浏览      27
2021-3-11 
 
±à¼­ÍƼö:
±¾ÎĽ«°´ÕÕ¡°·¢ÏÖÎÊÌâ-½â¾öÎÊÌ⡱µÄÏßË÷£¬Ñ­Ðò½¥½øµØÌÖÂÛ Watermark »úÖÆÔÚ Pravega ÖеÄÉè¼ÆºÍʵÏÖ£¬²¢¶Ô±È Flink µÄʵÏÖ¡£
±¾ÎÄÀ´×Ô¹«ÖںŠinfoQ£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

ÔÚÁ÷ʽ¼ÆËãµÄÊÀ½çÖУ¬Ê±¼äÎÊÌâÒ»Ö±ÊÇÀ§ÈÅ×ÅÒµ½çµÄÄѵãÓëÍ´µã£ºÈçºÎÄܹ»¸ü¼Ó¾«È·µØ½øÐлùÓÚʼþʱ¼ä´°¿ÚµÄ¼ÆË㣿Watermark µÄ¸ÅÄîÓ¦Ô˶øÉú¡£Watermark ÊÔͼ½«¸ü¼Ó¾«È·µÄʱ¼ä²Î¿¼ÒýÈëÁ÷ʽ¼ÆË㣬²¢È¡µÃÁËÔ½À´Ô½¶àµÄÁ÷ʽƽ̨µÄÖ§³Ö¡£Pravega Ò²²»ÀýÍ⣬ÔÚ×î½üµÄ°æ±¾¸üÐÂÖУ¨v0.6£©£¬Pravega ÒѾ­¼ÓÈëÁË Watermark µÄÍêÕûÖ§³Ö¡£ÓÉÓÚ Pravega Ô­ÉúÖ§³Ö Segment ¼¶±ðµÄÆóÒµ¼¶¶¯Ì¬Ëõ·ÅÌØÐÔ£¬ÔÚ´Ë»ù´¡ÉÏҪʵÏÖ Watermark ²¢·ÇÒ×Ê¡£±¾ÎĽ«°´ÕÕ¡°·¢ÏÖÎÊÌâ-½â¾öÎÊÌ⡱µÄÏßË÷£¬Ñ­Ðò½¥½øµØÌÖÂÛ Watermark »úÖÆÔÚ Pravega ÖеÄÉè¼ÆºÍʵÏÖ£¬²¢¶Ô±È Flink µÄʵÏÖ¡£±¾ÎÄ×îÔç³ö×Ô Pravega µÄ¹Ù·½²©¿Í¡£

1 ¶¯»ú

Á÷ʽ´¦Àí£¨Stream Processing£©´Ó¹ãÒåÉÏÖ¸µÄÊÇ´ÓÎÞ½çÊý¾ÝÔ´×¢ÈëÊý¾Ý²¢ÔÚ×¢ÈëµÄ¹ý³ÌÖнøÐÐÊý¾Ý´¦ÀíµÄÄÜÁ¦¡£ÕâЩÊý¾Ý¿ÉÒÔÊÇÓû§Éú³ÉµÄÊý¾Ý£¬ÀýÈçÉç½»ÍøÂç»òÆäËüÔÚÏßÓ¦Óã»Ò²¿ÉÒÔÊÇ»úÆ÷Éú³ÉµÄÊý¾Ý£¬ÀýÈçÀ´×ÔÎïÁªÍøºÍ±ßÔµÓ¦ÓõķþÎñÆ÷Ò£²âÊý¾Ý»ò´«¸ÐÆ÷Ñù±¾¡£

µäÐ͵ÄÁ÷ʽÊý¾Ý´¦ÀíÓ¦ÓÃͨ³£°´ÕÕÊý¾Ý²úÉúµÄ˳ÐòÒÀ´Î´¦ÀíÊý¾Ý¡£ÔÚʵ¼ÊÓ¦ÓÃÖУ¬ÓÉÓÚÒÔÏÂÔ­Òò£¬Ñϸñ°´ÕÕÈ«Ðò´¦ÀíÊý¾Ýͨ³£ÊÇÎÞ·¨ÊµÏֵģº

Êý¾ÝÔ´±¾Éí¾Í²»ÊÇÒ»¸öµ¥Ò»µÄÔªËØ£¬Ëü¿ÉÄÜÓɶà¸öÓû§£¬·þÎñÆ÷»òÕßÍø¹Ø×é³É£»

Ó¦ÓõÄÄÚÔÚÉè¼ÆÒ²¿ÉÄܵ¼Ö²»Í¬Êý¾ÝÏîÄ¿±»ÂÒÐò×¢ÈëºÍ´¦Àí¡£

Òò´Ë£¬ÔÚ Pravega ºÍÆäËüÀàËÆÏµÍ³ÖУ¬Ë³Ðò¶¼Ö¸µÄÊÇÊý¾Ý×¢ÈëµÄ˳Ðò£¬²¢ÇÒÓÉ¡°¼ü¡±È·¶¨¡£¡°¼ü¡±ÕâÒ»¸ÅÄîÁ¬½áÁËÊý¾ÝÁ÷Öеĸ÷¸öÔªËØ¡£

°´Éú³É˳Ðò´¦ÀíÊý¾ÝÊÇÁ÷ʽ´¦Àí×îÓÐÒâ˼µÄÒ»Ãæ£¬ÒòΪÕâʹµÃÓ¦ÓóÌÐò¿ÉÒÔÔÚ²»Í¬Ê¼þÖн¨Á¢ÆðÒ»ÖÖÁÙʱµÄÏà¹Ø¹ØÏµ£¬¾¡¹ÜÕâÖÖ¹ØÏµ±È½ÏËÉÉ¢¡£ÀýÈ磬ij¸öÓ¦ÓóÌÐòÄܹ»Éæ¼°ÕâÑùµÄÌáÎÊ£ºÔÚ¹ýÈ¥µÄһСʱÖÐÓжàÉÙ²»Í¬µÄÓû§µÇ¼ÁË£¬»òÕßÔÚ¹ýÈ¥ µÄÊ®·ÖÖÓÄÚÓжàÉÙ´«¸ÐÆ÷±¨¸æÁËÒì³£¶ÁÊý¡£ÎªÁËʵÏÖ²¢»Ø´ðÕâЩ²éѯ£¬Ó¦ÓóÌÐò±ØÐëÄܹ»ÎªÃ¿Ò»¸ö±¨¸æÖÜÆÚÉú³ÉÏàÓ¦µÄ½á¹û£¨µÚÒ»¸öÀý×ӵı¨¸æÖÜÆÚÊÇһСʱ£¬¶øµÚ¶þ¸öÀý×ӵı¨¸æÖÜÆÚÊÇÊ®·ÖÖÓ£©¡£ÕâЩ±¨¸æÖÜÆÚͨ³£±»³Æ×÷ʱ¼ä´°¿Ú£¨Time Window£©¡£

ÔÚÊý¾ÝÉú³Éʱ¾Í½øÐÐÊý¾Ý´¦ÀíʹµÃÓ¦ÓóÌÐò¿ÉÒÔÔÚÊý¾ÝÉú³ÉµÄͬʱ¾ÍÊä³ö½á¹û¡£¶ÔÓÚÓнçÊý¾Ý¼¯£¨²»»áÐÂÔöÊý¾Ý£©£¬¿ÉÒÔͨ¹ýʹÓà map-reduce ¶ÔËùÓд°¿Ú²¢ÐеؽøÐд°¿Ú¾ÛºÏ¡£¶øÕâ¶ÔÎÞ½çÊý¾Ý¼¯£¨Á÷£©È´²¢²»¿ÉÐУ¬ÒòΪÊý¾ÝÒ»Ö±ÔÚ¶¯Ì¬³ÖÐøÔö³¤¡£Òò´Ë£¬¶ÔÓÚ³ÖÐøÉú³ÉµÄÊý¾ÝÔ´£¬¿ÉÒÔÑ¡ÔñÓà map-reduce µÄ·½Ê½ÖÜÆÚÐԵش¦ÀíÊý¾Ý¼¯¿ìÕÕ»òÔöÁ¿£¨Õ⽫ÒýÈë¸ü³¤µÄ´¦Àíʱ¼ä£©£¬Ò²¿ÉÒÔÓÃÁ÷µÄ·½Ê½ÔÚÊý¾Ý×¢ÈëµÄͬʱ¾Í½øÐд¦Àí¡£Ïà¶ÔÓÚÖÜÆÚÐԵش¦Àí£¬ºóÕß¿ÉÒÔÌṩ¸üµÍµÄ¶Ëµ½¶ËʱÑÓ¡£

ΪÁ˽øÐÐÖîÈç´°¿Ú¾ÛºÏÖ®ÀàµÄ¼ÆË㣬Ê×ÏȱØÐëÓµÓÐijÖÖʱ¼ä²Î¿¼£¬²¢ÇÒʹµÃÿ¸öÊý¾ÝÔªËØ£¨ÀýÈ磺ÏûÏ¢£¬Ê¼þ£¬¼Ç¼µÈ£©¶¼ÓëÒ»¸öʱ¼äÖµÏà¹ØÁª¡£Èç¹ûûÓÐÒ»¸öʱ¼ä²Î¿¼£¬Ó¦ÓóÌÐò¾ÍÎÞ·¨È·¶¨Ò»¸öÊý¾ÝÔªËØ¾¿¾¹ÊôÓÚÄĸöʱ¼ä´°¿Ú¡£µäÐ͵ÄÓÃÓÚÌÖÂÛʱ¼ä²Î¿¼µÄʱÓò°üÀ¨Ê¼þʱ¼ä£¨Event Time£©ºÍ´¦Àíʱ¼ä£¨Processing Time£©¡£Ê¼þʱ¼äÖ¸µÄÊÇÊý¾ÝÔ´¸³ÓèʼþµÄʱ¼ä£¬Í¨³£ÓõÄÊÇʼþÉú³ÉʱµÄ¹ÒÖÓʱ¼ä¡£´¦Àíʱ¼äÓõÄÊÇʼþ±»½øÐÐÊý¾Ý´¦ÀíʱµÄʱ¼ä×÷²Î¿¼¡£Ä³¸öʼþËù¹ØÁªµÄʱ¼äҪôÊÇÔÚÓ¦ÓóÌÐò´Ó Pravega ¶ÁÈ¡Êý¾ÝµÄʱºò±»È·¶¨£¬ÒªÃ´ÊÇÔÚʼþ±»´¦ÀíµÄʱºòÈ·¶¨¡£´ËÍ⣬ÎÒÃÇ»¹¿¼ÂÇ×¢Èëʱ¼ä£¨Ingestion Time£©£¬¼´½øÐÐ×¢ÈëµÄÓ¦ÓóÌÐòÊÕµ½Ê¼þµÄʼþ¡£ÀýÈ磬ÔÚij¸öÀûÓà Pravega ½øÐÐÁ÷ʽÊý¾Ý´æ´¢µÄÓ¦ÓóÌÐòÖУ¬×¢Èëʱ¼ä¾ÍÊÇʼþ±»Ð´Èë Pravega Stream µÄʱ¼ä¡£Í¼ 1 չʾÁËÉÏÊöÈý¸öʱÓò¡£

ͼ 1 Pravega ÖеÄʱ¼ä

ÓÉÓÚÕâÈýÖÖʱÓò¸÷×Ô½«Ê¼þÉúÃüÖÜÆÚÖеIJ»Í¬Ê±¼äµãÓëÒ»¸öʼþÏà¹ØÁª£¬ËüÃDZØÈ»´æÔÚ²îÒì¡£µ±Êý¾ÝÔ´ÔÚʼþÉú³ÉµÄͬʱ¾ÍÁ¢¿Ì½øÐз¢ËÍʱ£¬Ê¼þʱ¼äºÍ×¢Èëʱ¼äÖ®¼äµÄ²îÒìͨ³£½ÏС¡£µ«ÊÇÓÉÓÚÍøÂçÁ¬½ÓÔ­Òò£¬Ò²¿ÉÄܳöÏÖһЩ¾ßÓÐÏÔÖøÆ«²îµÄÀëȺµã¡£×¢Èëʱ¼äºÍ´¦Àíʱ¼äÖ®¼äµÄ²îÒìÈ¡¾öÓÚ×¢Èë¹ý³ÌºÍ´¦Àí¹ý³ÌµÄʵ¼Ê·¢Éúʱ¼ä¡£ÊÂʵÉÏ£¬¶ÔÓÚ Pravega À´Ëµ£¬ÕâÒ»²îÖµ¿ÉÄÜ»áÏ൱´ó£¬ÒòΪ Pravega ÊÇÒ»¸ö´æ´¢ÏµÍ³£¬Êý¾ÝÔÚ±»×¢ÈëÖ®ºó¿ÉÄÜÔÚÈÎÒâʱ¼äÖ®ºó²Å±»Ó¦ÓóÌÐò´¦Àí¡£ÔÚ Pravega ÖУ¬ÎÒÃǽ«ÕâÖÖÔÚÈÎÒⳤʱ¼ä֮ǰ¾ÍÒѾ­×¢ÈëµÄÀÏÊý¾Ý³ÆÎªÀúÊ·Êý¾Ý£¨Historical Data£©¡£

Äܹ»Ê¹ÓÃÎÒÃÇÉÏÊöÌÖÂÛ¹ýµÄʱÓòÖ®Ò»½«Ò»¸öʱ¼äÖµ¹ØÁªµ½Ò»¸öʼþÉÏ»¹Ô¶Ô¶²»¹»¡£Ó¦ÓóÌÐòµÄÈ·¿ÉÒÔ´ÓÒ»¸öʱ¼ä´ÁÍÆ¶Ï³öij¸öʼþÊôÓÚÄĸöʱ¼ä´°¿Ú£¬µ«ËüÈçºÎÄÜÖªµÀËüÒѾ­ÊÕµ½ÁËij¸öʱ¼ä´°¿ÚÄÚµÄËùÓÐʼþ²¢ÇÒ¿ÉÒԹرյ±Ç°´°¿ÚÁËÄØ£¿ÔÚ´¦Àíʱ¼äÊÇÁ¬ÐøµÝÔöµÄ¼ÙÉèÏ£¬¹Ø±ÕÒ»¸ö»ùÓÚ´¦Àíʱ¼äµÄ´°¿Ú·Ç³£¼òµ¥£¬µ«¶ÔÓÚʼþʱ¼äºÍ×¢Èëʱ¼ä¾ÍÍêÈ«²»Í¬ÁË¡£¶ÔÓÚʼþºÍ´¦Àíʱ¼ä£¬½øÐÐÊý¾Ý´¦ÀíµÄÓ¦ÓóÌÐòÐèÒªÖªµÀËüºÎʱ£¨¼´±ãÖ»ÊǹÀ¼Æ£©Äܹ»¹Ø±ÕÒ»¸ö¸ø¶¨µÄ´°¿Ú²¢±¨¸æ¼ÆËã½á¹û¡£µ±È»£¬Ó¦ÓóÌÐòÒ²¿ÉÒÔÑ¡ÔñÓÀÔ¶²»¹Ø±Õʱ¼ä´°¿Ú²¢ÇÒ³ÖÐøÖØ¸´´¦Àí´°¿ÚÄÚÊý¾Ý¡£µ«ÊÇ£¬ÔÚij¸öʱ¼äµã£¬Ó¦ÓóÌÐò×ÜÊÇÐèÒªµ÷ÓúÍʹÓÃ×îÖյļÆËã½á¹û£¬È»ºóÏòÇ°ÍÆ½ø£¬ÕâÒѾ­µÈ¼ÛÓڹرյ±Ç°Ê±¼ä´°¿ÚÁË¡£

ΪÁËÈÃÓ¦ÓóÌÐòÄܹ»¶Ôʱ¼ä´°¿Ú½áÊø½øÐжÏÑÔ£¬ÎÒÃÇÐèÒªÖªµÀʼþ¹ØÁªÊ±¼äµÄϽ磬¶øÕâЩϽç¾Í±»³Æ×÷ Watermark¡£Watermark w ±£Ö¤ËùÓÐʱ¼ä´ÁСÓÚ w µÄʼþ¶¼ÒѾ­±»¶ÁÈ¡»òÕß´¦ÀíÁË£¨¾¿¾¹ÊǶÁÈ¡»¹ÊÇ´¦ÀíµÄÓïÒåÔòÒªÒÀÀµÉÏÏÂÎÄÈ·¶¨£©¡£È»¶ø£¬³Ùµ½µÄʼþ£¨Late Event£©×ÜÊÇÓм¸ÂÊ·¢Éú¡£ÈçºÎ´¦ÀíºÍ×îС»¯³Ùµ½Ê¼þÔòÒÀÀµ¾ßÌåµÄÓ¦ÓóÌÐòʵÏÖ¡£Í¼ 2 չʾÁË Watermark µÄ¸ÅÄî¡£

ͼ 2 ʱ¼äºÍ Watermark

ΪÁ˼ÆËã»ùÓÚʱ¼ä´°¿ÚµÄ¾ÛºÏ£¬ÎÒÃÇÐèÒªÄܹ»½«Ê¼þÓ³Éäµ½´°¿Ú²¢ÇÒÖªÏþºÎʱÄܹ»¹Ø±Õ´°¿Ú£¨¼ÆË㵱ǰ´°¿ÚÄڵľۺϣ©¡£¼´±ãÎÒÃǼÙÉèÖ»Óе¥Ò»µÄʼþÐòÁУ¬Ë³Ðò¸³ÖµµÄ·½·¨Ò²ÊÇÐв»Í¨µÄ£¬ÒòΪʼþ¿ÉÒÔÂÒÐò³öÏÖ¡£Í¼ÖУ¬Ê¼þ 7 ºÍʼþ 8 ¾Í³öÏÖÁËÕâÖÖÂÒÐò¡£Òò´Ë£¬¶ÔÓÚÿһ¸öʼþÎÒÃǶ¼ÐèÒªÒ»¸öʱ¼ä²Î¿¼£¬ÒÔ±ãÈ·¶¨½«Ëü·ÖÅäµ½Äĸöʱ¼ä´°¿Ú¡£ÎÒÃÇ»¹ÐèÒªÖªµÀºÎʱÄܹ»¹Ø±ÕÒ»¸öʱ¼ä´°¿Ú£¬¶ø Watermark ÕýÊÇÕâÑùÒ»ÖÖ³éÏó£ºÍ¨¹ýÌṩʱ¼äϽçÔÊÐí´°¿ÚÕýÈ·¹Ø±Õ¡£ÏÖʵÖУ¬ÒªÌṩÑϸñµÄ Watermark ±£Ö¤ÊǼ«ÆäÀ§Äѵġ£·Ö²¼Ê½ÏµÍ³µÄÒì²½±¾ÖÊʹµÃΪ³Ùµ½Ê¼þÌṩǿ±£Ö¤±äµÃ·Ç³£¸´ÔÓ¡£ÁíÍ⣬´Ó½ø¶ÈËù¹Ø×¢µÄ½Ç¶È¿´£¬Ìáǰ¹Ø±Õʱ¼ä´°¿Ú²¢ÔÊÐíһС²¿·Ö³Ùµ½Ê¼þÍùÍùÊÇÒ»ÖֽϺõÄÑ¡Ôñ¡£ÕâÖÖÑ¡Ôñͨ³£ÊÇÒÀÀµ¾ßÌåÓ¦ÓóÌÐòµÄ¡£

ÔÚÕâÆªÎÄÕÂÖУ¬ÎÒÃǽ«»áÌÖÂÛ Pravega ÐÂÔöµÄ¶Ôʼþʱ¼äºÍ×¢Èëʱ¼äµÄÖ§³Ö¡£ÎÒÃDZØÐë¿Ë·þµÄ¹Ø¼üÄѵãÖ®Ò»¾ÍÊÇÈçºÎÔÚÁ÷ʽÊý¾ÝµÄ Segment ¼¯ºÏ»áÒò×Ô¶¯Ëõ·Å»úÖÆ¶ø¶¯Ì¬±ä»¯µÄÇé¿öÏÂÌṩ Watermark µÄÖ§³Ö¡£ÎÒÃÇ¶Ô Pravega µÄ Reader Group ¼ÓÈëÁËÄÚ²¿Ö§³Ö£¬ÒÔ±ã¼ò»¯ÓëÁ÷ʽ´¦ÀíÆ÷µÄ¹ØÁª£¬ÀýÈç Apache Flink¡£ÎÒÃÇÓà Apache Flink ×÷Ϊ»ùÓÚ Watermark µÄÁ÷ʽ´¦ÀíÆ÷µÄÒ»¸öµäÐÍÀý×Ó£¬ÌÖÂÛ Flink ¶Ô Watermark µÄÖ§³ÖÒÔ¼°Óë Pravega µÄ Flink Á¬½ÓÆ÷£¨Connector£©µÄ¼¯³ÉÎÊÌâ¡£ÎÒÃÇ»¹»á¶ÔÈçºÎÓëÈÎÒâÓ¦ÓóÌÐò¼¯³É½øÐÐ×ܽᣬ²¢¸ù¾ÝÎÒÃǶԸÃÌØÐÔÏÖÓеľ­Ñ鏸³ö½¨Òé¡£

2 ʾÀý£ºApache Flink

Apache Flink ÊÇÒ»¸öΪÁ÷ʽºÍÅúʽÊý¾Ý¶øÉè¼ÆµÄ¿ªÔ´Æ½Ì¨£¬¶øÎÒÃDZàдÁËÒ»¸öÁ¬½ÓÆ÷ÔÊÐíÓ¦ÓóÌÐò¿ÉÒÔʹÓà Flink ´¦Àí Pravega µÄÁ÷ʽÊý¾Ý¡£Flink ÓÉÒ»¸öÔÊÐíÓ¦ÓóÌÐò±àд×÷Òµ£¨Job£©µÄ±à³ÌÄ£ÐͺÍÒ»¸öÖ´ÐÐ Flink ³ÌÐòµÄ·Ö²¼Ê½ÔËÐÐʱ»·¾³¹¹³É¡£ÔÚÔËÐÐʱ£¬Flink »·¾³°ÑÒ»¸ö³ÌÐòÓ³Éä³ÉÒ»¸öÊý¾ÝÁ÷£¬¶øÕâ¸öÊý¾ÝÁ÷ÓÉÒ»¸ö»ò¶à¸öÔ´£¨Source£©£¬Ò»ÏµÁб任Ëã×Ó£¨Operator£©ÒÔ¼°Ò»¸ö»ò¶à¸ö»ã£¨Sink£©×é³É¡£ÔÚ±¾ÎĹØÓÚ Watermark µÄÌÖÂÛÖУ¬Ô´ÊÇ×îÓÐÒâ˼µÄÔªËØ£¬ÒòΪÕýÊÇÓÉËüÀûÓà Pravega µÄʱ¼äÐÅÏ¢²úÉú Watermark¡£

Watermark ÊÇ Apache Flink ÖеĺËÐĸÅÄî¡£ËüÔÊÐíһϵÁлùÓÚʱ¼äµÄ¼ÆË㣬ÀýÈ粻ͬʱÓòϵÄʱ¼ä´°¿Ú£ºÊ¼þʱ¼ä£¬×¢Èëʱ¼äºÍ´¦Àíʱ¼ä¡£ÔÚ Flink ÖУ¬ËüÃDZ»³Æ×÷ʱ¼äÌØÕ÷£¨Time Characteristics£©¡£Ê¼þʱ¼äºÍ×¢Èëʱ¼äÔÚ Flink ÖÐÓÐ×Ų»Í¬µÄ¶¨Òå¡£ÔÚ Flink ÖУ¬×¢Èëʱ¼ä´ú±íʼþ½øÈë Flink Êý¾ÝÁ÷ʱµÄʱ¼ä£¬¶ø²»ÊÇָʼþ±»×¢ÈëÊý¾Ý¹ÜµÀ£¨ÀýÈçдÈë Pravega£©µÄʱ¼ä¡£Ê¼þʱ¼ä´ú±íÓ¦ÓóÌÐò¸³ÓèµÄʱ¼äÖµ£¬Ëüº­¸ÇÁËÓÉÓ¦ÓóÌÐòÈ·¶¨µÄÈÎÒâÐÎʽµÄʱ¼äºÍ Watermark£¬°üÀ¨ÔÚÔ´¶Ë½øÐеĻùÓÚ Pravega ´«²¥µÄʱ¼äÐÅÏ¢µÄ¸³Öµ¡£Òò´Ë£¬Ê¼þʱ¼äÊÇ Flink µÄʱ¼äÌØÕ÷£¬°üº¬ÁË Pravega ËùÌṩµÄʼþʱ¼äºÍ×¢Èëʱ¼ä¡£Í¼ 3 չʾÁËÕâЩ²»Í¬µÄʱ¼äÌØÕ÷ÒÔ¼°Óë Pravega µÄÇø±ð¡£

ͼ 3 Flink ºÍ Pravega ÖеÄʱ¼ä

ΪÁËÈ·¶¨ÔÚÒ»¸ö×÷Òµ¾¿¾¹Ê¹ÓúÎÖÖʱ¼äÌØÕ÷£¬Flink ÐèÒª³ÌÐòÔÚÖ´Ðл·¾³ÖÐÉèÖãº

final StreamExecutionEnvironment env = StreamExecutionEnvironment .getExecutionEnvironment();
env.setStreamTimeCharacteristic (TimeCharacteristic.EventTime);

µ±ÔÚ Flink ÖÐʹÓÃʼþʱ¼äʱ£¬±ØÐë¶Ôʼþ½øÐÐʱ¼ä´Á¸³Öµ£¬²¢ÇÒϵͳÐèÒª Watermark ×÷Ϊʼþʱ¼äµÄ½ø¶ÈÖ¸±êÁ¿¡£ÕâÓÐÁ½ÖÖʵÏÖ·½·¨£ºÍ¨¹ýÔ´Ö±½Ó½øÐлòÕßͨ¹ýʱ¼ä´Á¸³ÖµÆ÷£¨Í¬Ê±¸ºÔð²úÉú Watermark£©¡£Ê±¼ä´Á¸³ÖµÆ÷ÊÇ×÷Òµ¹æ¸ñ£¨Job Specification£©µÄÒ»²¿·Ö£¬Ëü±ØÐëÔÚµÚÒ»¸öʹÓÃʱ¼äµÄ²Ù×÷·¢Éú֮ǰ±»Ö¸Ã÷£¨Í¨³£ÔÚÔ´Ö®ºó£©¡£Ê±¼ä´Á¸³ÖµÆ÷½«¸²Ð´Ô´Ö±½ÓÉú³ÉµÄʱ¼ä´ÁºÍ Watermark¡£

Óë Pravega ×îÏà¹ØµÄÑ¡Ïî¾ÍÊÇÈÃÔ´¸³ÖµÊ±¼ä´Á²¢ÇÒ²úÉú Watermark¡£µ±Ê¹ÓÃÕâһѡÏîʱ£¬ÎÒÃÇ¿ÉÒÔʹÓñ¾ÎÄËùÃèÊöµÄ·½·¨£¬ÔÚ Pravega Á¬½ÓÆ÷ÖмÓÈëʱ¼ä´Á¸³ÖµºÍ Watermark Éú³ÉµÄÖ§³Ö¡£Ö§³Öʼþʱ¼äµÄ Flink Ô´ÐèÒªµ÷ÓÃÈçÏ·½·¨£º

SourceContext#collectWithTimestamp(T element, long timestamp): ´ÓÔ´ÖвúÉúÒ»¸öʼþ£¬²¢¸³ÖµÊ±¼ä´Á¡£

SourceContext#emitWatermark(Watermark mark): ²úÉú Watermark¡£

ÔÚ½ÓÏÂÀ´Á½¸öС½Ú£¬ÎÒÃǽ«¸ø³öÎÒÃǵÄÉè¼Æ£¬ÔÚ Pravega ÖÐÖ§³Ö Watermark¡£ÔÚÎÒÃÇÌÖÂÛÍêÉè¼ÆÓëʵÏÖÖ®ºó£¬ÎÒÃǽ«»ØÍ·Õ¹Ê¾¸ü¶àÓëÁ¬½ÓÆ÷¼¯³ÉµÄϸ½Ú¡£

3 Äѵã

¼ÙÉèÏÖÔÚÎÒÃÇÓÐÒ»¸ö¼òµ¥µÄÓ¦ÓóÌÐòºÍÒ»×é²úÉúʼþµÄ´«¸ÐÆ÷£¬Ò»¸ö Pravega Á÷£¬ÒÔ¼°Ò»¸ö Flink ×÷Òµ¡£¾ÍĿǰµÄÌÖÂÛ¶øÑÔ£¬¾¿¾¹Õâ¸ö×÷ÒµÔÚ½øÐÐÔõÑùµÄ²Ù×÷²¢²»ÖØÒª£¬µ«ÎÒÃǼÙÉèËüÕý»ùÓÚ Pravega µÄÁ÷½øÐÐijÖÖÐÎʽµÄʱ¼ä´°¿Ú¾ÛºÏ£¬²¢ÇÒËüÐèÒªÖªµÀʱ¼ä´°¿ÚµÄ±ß½ç¡£

Èç¹û´«¸ÐÆ÷±¾ÉíÄܹ»½øÐÐʱ¼ä´Á¸³Öµ£¬ÕâÑùдÈë Pravega µÄʼþ¶¼¸½¼Ó×Åʱ¼ä´ÁÐÅÏ¢£¬ÄÇô Flink µÄ×÷ÒµÔ´¾Í¿ÉÒÔÌáÈ¡ÕâЩʱ¼ä´Á²¢¾ßÓÐijÖÖʱ¼ä½ø¶ÈµÄ¸ÅÄî¡£¾¡¹ÜÕâÊÇÒ»¸öºÏ·¨µÄ·½·¨£¬µ«Õâô×öÓÐÁ½¸öÑÏÖØµÄȱµã£º

¶ÔÓÚÒ»¸ö¸ø¶¨µÄʱ¼ä´Á£¬ÎÒÃDz¢²»ÖªµÀÊÇ·ñ»¹ÓÐÒ»¸ö¾ßÓÐÏàͬʱ¼ä´ÁµÄʼþ£¬Òò´ËÎÒÃÇÎÞ·¨Íƽø Watermark¡£

Èç¹û Flink ԴûÓÐÊÕµ½Ê¼þ£¬Ëü¾Í²»ÖªµÀ¾¿¾¹ÊÇʼþʱ¼äÈÔÔÚÏòÇ°ÍÆ½ø¶ø½ö½öÖ»ÊÇûÓÐÐÂʼþ²úÉú£¬»¹ÊÇϵͳÕýÔÚ¾­ÀúÒì²½¹ý³Ì£¨ÀýÈçʼþ±»ÈÎÒâÑÓ³Ù£©¡£

ͨ³£ËµÀ´£¬³Ùµ½Ê¼þ²»¿ÉÄÜÍêÈ«±ÜÃ⣬ÒòΪÓÐÌ«¶àÇé¿ö¿ÉÄܵ¼Ö³ٵ½Ê¼þ£¬ÀýÈçÁ¬½Ó»òÕ߽ڵ㲻¿ÉÓᣵ«ÊÇ£¬Ô´ºÍÓ¦ÓóÌÐòÒ»°ã¶¼ÓÐʼþʱ¼äµÄÏà¹ØÐÅÏ¢£¨ÀýÈç×ÔÉíµÄʱÖÓ£©£¬²¢ÇÒÔÚÀíÏëÇé¿öÏÂÎÒÃÇÓ¦µ±´«²¥ÕâЩÐÅÏ¢ÒÔ±ã Flink Ô´¿ÉÒÔ¸ü¼Ó¾«È·µØÍƽøÊ¼þʱ¼ä¡£

ÏÖÔÚÎÒÃÇ¿´Ò»ÏÂÈçºÎÓà Pravega ʵÏÖÕâЩ¡£¼ÙÉèÎÒÃÇÖÜÆÚÐÔµØÏò Pravega Á÷µÄ×Ö½ÚÐòÁÐÀïдÈë±ê¼ÇÀ´±íÕ÷ʱ¼ä½ø¶È¡£ÕâЩ±ê¼ÇÖ¸Ã÷ËùÓÐʼþʱ¼äÔçÓÚÕâ¸ö±ê¼ÇµÄËùÓÐʼþ¶¼ÒѾ­Ð´ÈëÁË¡£Õâô×ö»á´øÀ´Èý¸öÎÊÌ⣺

¾ßÓжà¸ö Writer µÄ Pravega Á÷ÐèҪЭµ÷±ê¼ÇµÄдÈ룬±£Ö¤ËüÃÇ·´Ó³³öËùÓÐ Writer µÄ״̬¡£

Pravega Á÷ͨ³£¶¼²»ÊÇÒ»¸ö¼òµ¥µÄ×Ö½ÚÐòÁУ¬ËüÒ»°ãÓɶà¸ö²¢ÐÐµÄ Segment ¹¹³É¡£

Segment µÄÄÚ²¿ÊµÏÖÊÇÒ»×é×Ö½ÚÐòÁУ¬Òò´Ë½«±ê¼ÇÕâÖÖ¿ØÖÆÊý¾ÝÓëÓ¦ÓóÌÐòÊý¾Ý»ìºÏ´æ´¢ÔÚÒ»Æð²¢²»ÊÇÒ»¸öºÃ·½·¨¡£

ΪÁ˽â¾öÎÊÌâ 1£¬ÎÒÃÇÐèҪijÖÖ»úÖÆÀ´²Î¿¼ËùÓÐÒÑÖªµÄ Writer£¬¶øÎÊÌâ 2 ÒªÇó±ê¼ÇÄܹ»·´Ó³¿ç Segment µÄλÖ᣶ÔÓÚÎÊÌâ 3£¬ÎÒÃÇÐèÒªÔÚÍⲿά»¤±ê¼Ç¡£Í¼ 4 չʾÁËÒ»¸öÍù Pravega ×¢Èëʼþ²¢½øÐд¦ÀíµÄÓ¦ÓóÌÐòµÄʱ¼äÁ÷¡£

ͼ 4 Pravega ÖеÄʱ¼äÁ÷

²Î¿¼ËùÓÐ Writer ²¢²»ÊÇÒ»¼þ¼òµ¥µÄÊ£¬ÒòΪ Writer ¿ÉÒÔÔÚÏßÒ²¿ÉÒÔÀëÏß¡£ÎÒÃÇÑ¡ÔñµÄÈκλúÖÆ¶¼±ØÐ뿼ÂÇ Writer ¼¯ºÏµÄÕâÖÖ¶¯Ì¬ÐÔ¡£ÔÚÍⲿ±£´æ±ê¼ÇµÄͬʱ»¹ÒªÄܹ»½«ËüÃÇÓ³Éäµ½¿ç Segment µÄλÖã¬ÎÒÃÇÐèҪijÖÖÊý¾Ý½á¹¹À´Î¬»¤ÕâÖÖ Segment µ½Æ«ÒÆÁ¿µÄÓ³Éä¹ØÏµ£¬²¢ÇÒÎÒÃÇÐèÒªÔÚÁ÷Êý¾ÝÖ®Íâά»¤ÕâЩ±ê¼Ç£¬ÀýÈçÔÚÒ»¸öµ¥¶ÀµÄ Segment ÖС£

ÏÖÔÚ£¬»¹ÓÐÒ»¸öÎÊÌâÐèÒª½â¾ö£º¿ÕÏÐ Reader¡£Reader Group Эµ÷¶Ô×éÄÚ Reader µÄ Segment ·ÖÅä¡£¼ÙÉèÒ»¸ö¸ø¶¨µÄ Reader ûÓб»·ÖÅäµ½ Segment¡£ÕâÖÖ³¡¾°ÊÇ¿ÉÄÜ´æÔڵģ¬ÀýÈ磬µ±×éÄÚ Reader µÄÊýÁ¿´óÓÚ Segment ÊýÁ¿µÄʱºò¡£ÔÚÕâÖÖÇé¿öÏ£¬Ò»¸öûÓб»·ÖÅäµ½ Segment µÄ Reader ÈçºÎÄܹ»ÖªµÀʼþʱ¼äÔÚÏòÇ°ÍÆ½ø£¿ÎªÁËÈÿÕÏÐ Reader ÔÚûÓб»·ÖÅäµ½ Segment µÄʱºòÒ²Äܹ»²úÉú Watermark£¬ÎÒÃÇͨ¹ý Reader Group µÄ״̬ͬ²½Æ÷£¨State Synchronizer£©À´Ð­µ÷ʼþʱ¼äµÄÍÆ½ø¡£ÕâÖÖЭµ÷ʹµÃËùÓÐ Reader ¿ÉÒÔ²»ÒÀÀµ Segment µÄ·ÖÅä¶øÍÆ½øÊ¼þʱ¼ä¡£

µ½Ä¿Ç°ÎªÖ¹£¬ÎÒÃÇÒ»Ö±ÔÚÌÖÂÛʱ¼äȴʼÖÕûÓÐ˵Ã÷ʱ¼ä²Î¿¼¾¿¾¹´ÓºÎ¶øÀ´¡£ÕâÊÇÓÐÒâ¶øÎªÖ®£ºÎÒÃDz»ÏëÏÞÖÆÓ¦ÓóÌÐòʹÓÃÌØ¶¨µÄʱ¼ä²Î¿¼£¬»òÕßÏÞ¶¨ÕâÖÖʱ¼ä²Î¿¼ºÎʱ¿ªÊ¼´æÔÚ¡£ÕâÖÖʱ¼ä²Î¿¼¿ÉÒÔÊǹÒÖÓʱ¼ä£¬·Ç³£½Ó½üÊý¾ÝÉú³ÉʱµÄµ±Ç°Ê±¼ä£¬Ò²¿ÉÒÔÊÇ´ÓÎļþ¶ÁȡʼþʱµÄÈÎÒâ¹ýȥʱ¼äµã¡£ÎÒÃDz»ÏëÊÔͼ¹æ¶¨»òÇ¿ÖÆÈκζÔʱ¼ä¸³ÖµµÄ·½·¨£¬ÓÈÆäÊǶÔÓÚʼþʱ¼ä£¬ÎÒÃÇÏ£ÍûÓ¦ÓóÌÐò¿ÉÒÔ¸ù¾Ý×ÔÉíµÄÉè¼ÆÊ¹ÓÃÈκÎÓÐÒâÒåµÄ·½·¨ÉèÖÃÕâ¸öÖµ¡£

ÔÚ½ÓÏÂÀ´µÄ¼¸¸öС½ÚÖУ¬ÎÒÃÇ»áÏêÊöÎÒÃǵÄÉè¼ÆºÍʵÏÖ¡£Ðí¶àÎÒÃÇÒѾ­ÌÖÂÛ¹ýµÄ³éÏó¸ÅÄî¶¼»áÔÚÓàϵÄÕ½ÚÖоßÏÖ»¯¡£

4 Pravega ¶Ô Watermark µÄÖ§³Ö

Pravega µÄ Watermark »úÖÆÓÉÈý¸öÖ÷Òª²¿·Ö×é³É£¬ÈçÌá°¸ÎĵµËùÊö£º»ñȡʱ¼ä£¬Ê±¼ä´Á¾ÛºÏÒÔ¼°Ê±¼ä´°¿ÚµÄ»ñÈ¡¡£

4.1 »ñȡʱ¼ä

Ê×ÏÈÊÇ EventStreamWriter ÉϵÄÒ»¸ö API£¬ÓÃÓڼǼʱ¼ä¡£ÕâÔÊÐíÒ»¸ö½øÐÐÊý¾ÝдÈëµÄÓ¦ÓóÌÐòÏò Pravega ±íÃ÷µ±Ç°ÕýÔÚдÈëµÄÊý¾ÝËù¶ÔÓ¦µÄʱ¼ä¡£

EventStreamWriter<EventType> writer = clientFactory.createEventWriter(stream, serializer, EventWriterConfig.builder().build());
//... write events ...
writer.noteTime(currentTime);

ÕâÀ¡°noteTime ¡±API ¿ÉÒÔ±»ÖÜÆÚÐԵص÷Óã¬Ö¸Ã÷ËùÓÐÒѾ­Ð´ÈëµÄʼþ¶¼·¢ÉúÔÚij¸öʱ¼ä֮ǰ¡£

Õâ¸ö API µÄ½á¹¹Ê¹µÃÄÇЩ²»¹ØÐÄ Watermark µÄÓ¦ÓóÌÐò²»±Ø¶îÍâ×öÈκÎÊÂÇé¡£´ËÍ⣬Ëü»¹ÔÊÐíÓ¦ÓóÌÐò¶¨Òå×Ô¼ºµÄʱ¼ä¸ÅÄî¡£

ÀàËÆµØ£¬¶ÔÓÚÊÂÎñÐÔ Writer£¬ÔÚÊÂÎñµÄ commit()·½·¨ÉÏÓÐÒ»¸ö¿ÉÑ¡²ÎÊý£¬ÔÊÐíÓ¦ÓóÌÐòÖ¸Ã÷µ±Ç°ÊÂÎñËùдÈëʼþµÄʱ¼ä¡£

Transaction<EventType> txn = writer.beginTxn();
//... write events to transaction.
txn.commit(txnTimestamp);

noteTime()·½·¨ºÍ commit()·½·¨¶¼½ÓÊÜÒ»¸öʱ¼ä´Á²ÎÊý£¬¶ø²¢·ÇÖ±½Ó²éѯϵͳʱÖÓ¡£ÕâÔÊÐíÓÃʼþʱ¼äµÄ·½Ê½¶¨Òåʱ¼ä¡£

Èç¹ûÕýÔÚ½øÐÐʼþдÈëµÄ½ø³Ì²¢²»ÊÇʼþµÄÕæÕýÉú²úÕߣ¬ÀýÈçʼþÀ´×Ô Web ǰ¶Ë£¬Òƶ¯ App£¬»òÕßǶÈëʽϵͳ£¬ÄÇôʼþµÄ·¢ÉúÓëдÈëÖ®¼äÒ»¶¨´æÔÚʱ¼ä²î¡£ÕâͬÑùÊÊÓÃÓÚʼþ±¾Éí¾ÍÊÇ´Óij¸öÉÏÓÎÔ´Í·µ¼³öµÄ³¡¾°¡£ÀýÈ磬´Óij¸öÁ÷¶ÁÈ¡Êý¾Ý£¬ÓÃijÖÖ·½Ê½½øÐÐÊý¾Ý´¦Àí£¨±ÈÈç¾ÛºÏ£©£¬È»ºóÔÙ½«ÆäдÈëÁíÒ»¸öÁ÷£¬ÕâÊǷdz£³£¼ûµÄÓ¦Óá£

Èç¹ûÄãµÄÓ¦ÓóÌÐò²»ÐèÒª¶¨Òåʱ¼ä£¬ÄÇô¿ÉÒÔÖ±½ÓʹÓÃ×¢Èëʱ¼ä£ºÓÐÒ»¸öÃûΪ automaticallyNoteTime ÅäÖòÎÊý¿ÉÒÔÌṩÕâÒ»ÐÐΪ¡£Äã¿ÉÒÔÕâÑùÅäÖãº

EventStreamWriter<EventType> writer = clientFactory.createEventWriter (stream, serializer, EventWriterConfig.builder( ).automaticallyNoteTime (true).build());

µ±ÕâһѡÏÆôʱ£¬¾ÍÎÞÐèÔÙµ÷Óà noteTime()·½·¨ÁË¡£

Ò»µ©»ñÈ¡ÁËʱ¼ä£¬Á÷ÉϵÄËùÓÐ Writer ¶¼±ØÐëÐγÉÒ»¸öͳһµÄÊÓͼ¡£ÎªÁ˽øÐÐÕâÖ־ۺϣ¬¿Í»§¶ËÔÚÄÚ²¿»á½«Ê±¼äÖµÓë Writer µÄµ±Ç°Î»ÖýøÐÐ×éºÏ£¬²¢½«ÐÅÏ¢·¢Ë͸ø¿ØÖÆÆ÷£¨Controller£©¡£

4.2 ´Ó¶à¸ö Writer ½øÐÐʱ¼ä´Á¾ÛºÏ

¿ØÖÆÆ÷´ÓËùÓÐµÄ Writer ½ÓÊÕÕâЩʱ¼ä´ÁÓëλÖÃÐÅÏ¢¡£¿ØÖÆÆ÷ÕâÑù×öÐÅÏ¢¾ÛºÏ£ºËü´ÓÒ»¸öÁ÷ÉϵÄËùÓÐ Writer ÊÕ¼¯Ê±¼ä´Á²¢Êä³öÒ»¸ö Stream Cut£¬Õâ¸ö Stream Cut ´óÓÚµÈÓÚËùÓÐ Writer µ±Ç°Î»ÖõÄ×î´óÖµ£¬Í¬Ê±»¹Êä³öËùÓÐ Writer ±¨¸æÊ±¼äµÄ×îСֵ×÷Ϊʱ¼ä´Á¡£ÈçÏ£º

ͼ 5 ¾ÛºÏ Writer µÄʱ¼ä´Á

ͨ¹ýÕâÑùµÄ·½Ê½¾ÛºÏʱ¼ä´Á£¬µ±Ò»¸ö Reader µÄµ±Ç°Î»Öó¬¹ýÒ»¸ö¸ø¶¨ Stream Cut µÄʱºò¾ÍÒ»¶¨Äܱ£Ö¤ÒѾ­¶ÁÈ¡ÁËËùÓжÔÓ¦µÄʼþ¡£

µ±È»£¬Writer ¿ÉÒÔÔÚÏßÒ²¿ÉÒÔÀëÏß¡£ºÜ×ÔÈ»µÄ£¬Èç¹ûÒ»¸ö Writer ¹Ø±Õ²¢ÇÒ²»ÔÙÉÏÏߣ¬ÎÒÃDz»Ï£ÍûÒ»Ö±³ÖÓÐËüµÄµÝÔöʱ¼äÐÅÏ¢¡£ÎªÁËÅųýÕâÖÖÇé¿ö£¬Á÷ÉÏÓÐÒ»¸öÃûΪ timestampAggregationTimeout µÄÅäÖòÎÊý¡£ÕâÒ»ÅäÖÃÏîÖ¸Ã÷µ±³¬¹ý¶à³¤Ê±¼äûÓÐÊÕµ½Ò»¸ö Writer µÄÐÅÏ¢ºó£¬¾Í°ÑËüÅųýÔÚʱ¼ä´°¿Ú¼ÆËãÖ®Íâ¡£

ΪÁËÈà Reader ¿ÉÒÔ¶ÁÈ¡ÕâЩ¾ÛºÏºóµÄÐÅÏ¢£¬¿ØÖÆÆ÷½«¾ÛºÏºóµÄʱ¼äºÍ Stream Cut ÐÅϢдÈëÒ»¸öÌØÊâµÄ Segment¡£Õâ¸ö Segment ÔÚ Pravega ÄÚ²¿±»³ÆÎª Mark Segment¡£Reader ¿ÉÒÔ´ÓÕâ¸öÌØÊâµÄ Segment ¶ÁÈ¡ÏàÓ¦µÄÐÅÏ¢À´È·¶¨ËüÃÇÔÚÁ÷ÖеÄλÖá£

4.3 Reader »ñȡʱ¼ä´°¿Ú

×îÖÕ£¬ËùÓÐµÄ Reader Эµ÷ËüÃǸ÷×ÔµÄλÖÃÐÅÏ¢£¬µÃµ½Ò»¸ö Stream Cut ÐÎʽµÄ×éºÏλÖÃÐÅÏ¢¡£ÕâÓÐÒ»µãÄÑÀí½â£¬ÒòΪΪÁËÖªµÀ Reader Ïà¶ÔÓÚ Mark Segment ÖÐËù¼Ç¼µÄ Stream Cut µÄλÖã¬Reader ±ØÐëÊ×ÏÈÉú³ÉÒ»¸ö¾ÛºÏºóµÄ Stream Cut¡£ÕâÐèÒª Reader Group ÖÐËùÓÐ Reader ¹²Í¬Ð­×÷¡£ÎÒÃÇÊÇÕâÑùʵÏֵģºÈÃÿһ¸ö Reader ¶¼°ÑËüÃǵÄλÖÃÐÅÏ¢¼Ç¼ÔÚÒ»¸ö״̬ͬ²½Æ÷ÖС£

Ò»µ©»ñÈ¡ÁËÒ»¸öλÖÃÐÅÏ¢£¬½ÓÏÂÀ´¾ÍÐèÒª¶ÔËü½øÐбȽϡ£ÊÂʵÉÏ£¬±È½ÏµÄ½á¹û²¢²»ÊÇÒ»¸öµ¥Ò»µÄÊýÖµ¡£ÀýÈ磬¿¼ÂÇÈçÏ Stream Cut ÉϵÄÒ»¸ö Reader Group£º

ͼ 6 Ò»¸öʱ¼äÉÏϽç·Ö±ðΪ T5 ºÍ T2 µÄ Stream Cut

ÔÚÕâ¸öÀý×ÓÖУ¬Reader Group ²¿·Ö³¬Ô½Ä³¸öʱ¼äÖµ£¬µ«ÓÖ²¿·ÖÂäºóÓÚËü¡£Èç¹ûÄã´Ó Watermark µÄÉè¼Æ³õÖÔ¿¼ÂÇ£¬ÕâÒ»ÇоͶ¼ËµµÃͨÁË¡£Êý¾ÝÔÚ¶à¸öÖ÷»úÉϱ»²¢Ðд¦Àí£¬ÎÒÃÇÏëҪȷ¶¨ÕâÑùÒ»¸öʱ¼äµã£ºÔÚ¸Ãʱ¼äµã֮ǰµÄËùÓÐʼþ¶¼ÒѾ­±»´¦ÀíÁË¡£

ÕýÒòΪÈç´Ë£¬Reader ÊÕµ½µÄÊÇÒ»¸ö TimeWindow Êý¾Ý½á¹¹¶ø²»ÊÇÒ»¸ö¼òµ¥µÄʱ¼äÊýÖµ¡£ÕâÕýÊÇ Reader µÄ·Ö²¼Çø¼ä¡£ÔÚÉÏÊöÀý×ÓÖУ¬Ê±¼äÉÏϽç·Ö±ðΪ T5 ºÍ T2¡£Õâһʱ¼ä´°¿Ú¿ÉÒÔͨ¹ýµ÷ÓÃÈçÏ·½·¨»ñÈ¡£º

TimeWindow window = reader.getTimeWindow();

ÔÚÕâÒ»¹ý³ÌÖÐʼÖÕ±£³ÖµÄ²»±äÁ¿ÊÇ£¬Ò»¸ö Reader µÃµ½µÄʱ¼äϽçÒâζ×ÅËùÓÐÔçÓÚÕâ¸öʱ¼äµãµÄʼþ¶¼Ò»¶¨ÒѾ­±»¶ÁÈ¡ÁË¡£»¹ÓÐһЩ¼«¶ËµÄÀý×ÓÐèҪעÒâ¡£

Reader Group ¿ÉÄÜλÓÚµ±Ç°Á÷µÚÒ»´Î¼Ç¼µÄʱ¼ä´Á֮ǰ£¬ÔÚÕâÖÖÇé¿öÏ£¬Ê±¼ä´ÁµÄϽçÎÞ·¨×¼È·¶¨Ò塣Ψһ¿ÉÒÔÈ·¶¨µÄÊÇ£¬Reader Group ´¦ÓÚµÚÒ»¸öʱ¼ä´Á֮ǰ¡£

Reader Group ¿ÉÄÜλÓÚ¿ØÖÆÆ÷Ëù¼Ç¼µÄ×îºóÒ»¸ö±ê¼ÇÖ®ºó¡£ÀýÈ磬Èç¹ûÒ»¸ö Reader Group Õý´¦ÓÚÁ÷µÄβ¶Ë²¢ÇÒÏû·ÑËٶȽô¸ú×¢ÈëÊý¾Ý£¬ÄÇôËüºÜÓпÉÄÜÔÚ¿ØÖÆÆ÷¾ÛºÏʱ¼ä֮ǰ¾ÍÍê³ÉÁËʼþ´¦Àí¡£´Ëʱ£¬µ±Ó¦ÓóÌÐòµ÷Óà getTimeWindow()·½·¨Ê±£¬·µ»ØµÄ TimeWindow ½á¹¹ÖУ¬upperTimeBound ³ÉÔ±¿ÉÄÜΪ¿ÕÖµ¡£ÀàËÆµØ£¬lowerTimeBound ³ÉÔ±Ò²¿ÉÄÜÖͺóÓÚ Reader µÄʵ¼ÊλÖã¬ÒòΪËü±ØÐëµÈ´ýʱ¼äÐÅÏ¢½øÐоۺϲÙ×÷¡£

TimeWindow ½á¹¹ÊÇ»ùÓÚ Reader µ±Ç°ÒѾ­¶ÁÈ¡µÄλÖöø²»ÊÇÓ¦ÓóÌÐò´¦ÀíµÄλÖã¨ÒòΪ Pravega ¸ù±¾ÎÞ´ÓÖªÏþÕâÒ»ÐÅÏ¢£©¡£ËùÒÔ£¬Èç¹ûÓ¦ÓóÌÐòÓÉÓÚ Reader ËÀÍö¶øµ÷ÓÃÁË readerOffline()·½·¨Ö¸Ã÷ÐèÒªÖØÐ´¦Àíʼþ£¬ÄÇô TimeWindow ¿ÉÄܵ¹ÍËÒԱ㷴ӳ³öijЩʼþÐèÒª±»ÖØÐ´¦Àí£¬ÒòΪÔÚ Reader ËÀÍöµÄ¹ý³ÌÖУ¬ÕâЩÕýÔÚ±»´¦ÀíµÄʼþÒѾ­¶ªÊ§ÁË¡£

4.4 Óë´¦ÀíÂß¼­µÄÁªÏµ

ÔÚ EventStreamReader ½Ó¿ÚÉÏ£¬getTimeWindow()·½·¨·µ»ØÒ»¸ö TimeWindow ¶ÔÏó¡£TimeWindow ¶ÔÏóÌṩÁËʱ¼äµÄÉϽçºÍϽ硣

ÕâÊÇÒ»¸ö»ùÓÚÀ­È¡£¨Pull£©¶ø²»ÊÇÍÆËÍ£¨Push£©µÄÄ£ÐÍ£¬Ò²¾ÍÊÇ˵ÎÒÃÇ¿ÉÒÔ¼ÙÉèÍùÁ÷ÖÐ×¢ÈëһЩ¡°Î±Ê¼þ¡±¡£ÕâһģÐÍÓÐÈçÏÂÓŵ㣺ËüÎÞÐèÇ¿ÖÆÎªÃ¿Ò»¸öÁ÷¶¼´¦Àíʱ¼ä£¬ËüÔÊÐíʱ¼äÔÚÒ»¸öûÓÐÈκÎʼþµÄÁ÷ÉÏÏòÇ°ÍÆ½ø£¬µ«×îÖØÒªµÄÊÇËüΪ TimeWindow µÄ¼ÆËãÆµÂÊÌṩÁËÁé»îÐÔ¡£

TimeWindow ·´Ó³ÁËÁ÷Éϵĵ±Ç°Î»Öã¬Òò´Ë£¬Èç¹ûÐèÒªµÄ»°£¬¿ÉÒÔÔÚÿ´Îµ÷ÓÃÍê readNextEvent()·½·¨Ö®ºó¶¼µ÷ÓÃËü£¬»òÕßÒ²¿ÉÒÔÖÜÆÚÐԵص÷ÓÃËüÒԱ㽫ʼþ°´´°¿Ú·Ö×é¡£

4.5 Flink Á¬½ÓÆ÷µÄʾÀý

ÔÚ Pravega µÄ Flink Á¬½ÓÆ÷ÖоÍÓÐÕâÑùÒ»¸öÀý×Ó£¬ÊµÏÖÁË TimestampsAndPeriodicWatermarksOperator ½Ó¿Ú£º

@Override
public void onProcessingTime (long timestamp) throws Exception {
// register next timer
Watermark newWatermark = userFunction.getCurrentWatermark();
if (newWatermark != null && newWatermark.getTimestamp() > currentWatermark) {
currentWatermark = newWatermark.getTimestamp();
// emit watermark
output.emitWatermark (newWatermark);
}
long now = getProcessingTimeService ().getCurrentProcessingTime();
getProcessingTimeService( ).registerTimer (now + watermarkInterval, this);
}

´Ë´¦£¬Á¬½ÓÆ÷»ñȡʱ¼ä´°¿Ú£¬Èç¹ûÌõ¼þÂú×㣬ÔòÍÆ½ø Flink µÄ Watermark£¬Éú³ÉÐ嵀 Watermark ²¢µ÷¶ÈÈÎÎñÔÚÒ»¸ö¿ÉÅäµÄʱ¼ä¼ä¸ôºóÖØÐÂÔËÐС£

ÓÉÓÚÕâ¶ÎÂß¼­ÊÇÔÚÁ¬½ÓÆ÷ÉÏʵÏֵģ¬ËùÓÐʹÓà Pravega µÄ Flink Ó¦ÓóÌÐò¶¼¿ÉÒÔͨ¹ýʹÓñê×¼ Flink µÄ API ÏíÊܵ½»ùÓÚʼþʱ¼ä»ò×¢Èëʱ¼äµÄ Watermark µÄºÃ´¦¡£

5 ×ܽá

´¦ÀíÁ÷µÄβ²¿Êý¾ÝºÍÀúÊ·Êý¾ÝÊÇ Pravega µÄÁ½´ó×é³ÉÌØÐÔ¡£Pravega ´æ´¢Á÷ʽÊý¾Ý²¢Ê¹ÓÃͳһµÄ API ÔÊÐíÓ¦ÓóÌÐòÔÚÊý¾Ý¿ÉÓÃʱÁ¢¼´´¦Àí»òÕßÔÚ½«À´ÈÎÒâʱ¼ä´¦Àí¡£ÎªÁ˽á¹ûµÄÒ»ÖÂÐÔ£¬Á÷ʽÊý¾ÝÐèÒªÓÐÒ»¸öʱ¼ä²Î¿¼ÒÔ±ãʹµÃ½á¹ûÓëÁ÷ʽÊý¾ÝºÎʱ±»´¦ÀíÎ޹أ¬²¢ÇÒÕâÒ²°ó¶¨ÁËʱ¼äÔÊÐí½øÐÐʱ¼ä´°¿Ú¼ÆË㣬ÕâÊǷdz£¹Ø¼üµÄÒ»µã¡£ÕýÊÇÁ÷ʽÊý¾ÝµÄÕâÖÖ¶Ôʱ¼äÐÅÏ¢µÄÐèÇóʹµÃÎÒÃÇ¶Ô Pravega ¼ÓÈëÁË Watermark µÄÖ§³Ö¡£

ÎÒÃÇ¶Ô Watermark µÄÖ§³ÖÓÉÒÔϼ¸²¿·Ö×é³É£º½«Ê±¼ä´Á¹ØÁªµ½ Pravega µÄдÈëÊý¾ÝÉÏ£¬¸ù¾Ýʱ¼ä´ÁÉú³É±íÕ÷λÖÃÐÅÏ¢µÄ Stream Cut£¬ÒÔ¼°Í¨¹ý Reader ¶ÔÍⱩ¶ʱ¼äÐÅÏ¢ÒÔ±ãÔÊÐíÓ¦ÓóÌÐòÉú³É Watermark¡£Ä³¸ö Reader µÃµ½µÄʱ¼äÐÅÏ¢ÊÇÒ»¸ö¸ù¾Ý¸÷ Reader µÄλÖÃÉú³ÉµÄ¿ç Reader ʱ¼ä·¶Î§¡£Õâ¸öʱ¼ä·¶Î§¸ø³öÁËËùÓÐ Reader ÒѾ­¶ÁÈ¡Êý¾ÝµÄϽçÒÔ¼°ÔÚ Reader Group Éϵķֲ¼¿ç¶È¡£

±¾Îĵķ½·¨ÊÇÒ»¸öͨÓ÷½·¨£¬²¢ÇÒÖ§³ÖÈÎÒâÓ¦ÓóÌÐòÉú³Éµ¥µ÷µÝÔöµÄʱ¼ä´Á¡£ÎÒÃÇÑ¡Ôñ Apache Flink ×÷ΪÊ׸ö¼¯³É¶ÔÏó£¬ÒòΪËü¶Ô´°¿Ú¾ÛºÏºÍ Watermark ¾ßÓи߼¶Ö§³Ö¡£ÎÒÃÇÔÚ Pravega µÄ Flink Á¬½ÓÆ÷ÉϼÓÈëÁË Flink Ö§³Ö£¬Ê¹µÃʹÓà Pravega µÄ Flink ×÷Òµ¿ÉÒÔ´Ó Watermark ÖлñÒæ¡£ÎÒÃÇÆÚ´ýδÀ´µÄ Pravega Á¬½ÓÆ÷¿ÉÒÔÌṩÀàËÆµÄÖ§³Ö£¬²¢ÇÒ¶ÀÁ¢µÄÓ¦ÓóÌÐò¿ÉÒÔ×Ô¼ºÊµÏÖÕâÖÖÖ§³Ö£¬ÒòΪ±¾ÎÄÒѾ­Õ¹Ê¾ÁËʹÓøà API ËùÐè¼ÓÈëµÄÂß¼­ÊǷdz£¼òµ¥Ö±°×µÄ¡£

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

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
´óÊý¾Ýƽ̨ϵÄÊý¾ÝÖÎÀí
ÈçºÎÉè¼ÆÊµÊ±Êý¾Ýƽ̨£¨¼¼Êõƪ£©
´óÊý¾Ý×ʲú¹ÜÀí×ÜÌå¿ò¼Ü¸ÅÊö
Kafka¼Ü¹¹ºÍÔ­Àí
ELK¶àÖּܹ¹¼°ÓÅÁÓ
×îпγÌ
´óÊý¾Ýƽ̨´î½¨Óë¸ßÐÔÄܼÆËã
´óÊý¾Ýƽ̨¼Ü¹¹ÓëÓ¦ÓÃʵս
´óÊý¾ÝϵͳÔËά
´óÊý¾Ý·ÖÎöÓë¹ÜÀí
Python¼°Êý¾Ý·ÖÎö
³É¹¦°¸Àý
ijͨÐÅÉ豸ÆóÒµ PythonÊý¾Ý·ÖÎöÓëÍÚ¾ò
Ä³ÒøÐÐ È˹¤ÖÇÄÜ+Python+´óÊý¾Ý
±±¾© Python¼°Êý¾Ý·ÖÎö
ÉñÁúÆû³µ ´óÊý¾Ý¼¼Êõƽ̨-Hadoop
ÖйúµçÐÅ ´óÊý¾Ýʱ´úÓëÏÖ´úÆóÒµµÄÊý¾Ý»¯ÔËӪʵ¼ù