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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÉîÈëÀí½âApache FlinkºËÐļ¼Êõ
 
  2318  次浏览      27
 2018-11-1
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcsdn£¬±¾ÎÄÖ÷Òª½éÉÜÁËFlinkÏîÄ¿µÄһЩ¹Ø¼üÌØÐÔ£¬Ï£Íûͨ¹ý±¾ÎĵĽéÉÜÄܹ»ÈöÁÕß¶ÔFlinkÓиü¶àµÄÁ˽⣬ҲÈøü¶àµÄÈËʹÓÃÉõÖÁ²ÎÓëµ½FlinkÏîÄ¿ÖÐÈ¥¡£

Apache Flink£¨Ï¼ò³ÆFlink£©ÏîÄ¿ÊÇ´óÊý¾Ý´¦ÀíÁìÓò×î½üȽȽÉýÆðµÄÒ»¿ÅÐÂÐÇ£¬Æä²»Í¬ÓÚÆäËû´óÊý¾ÝÏîÄ¿µÄÖî¶àÌØÐÔÎüÒýÁËÔ½À´Ô½¶àÈ˵ĹØ×¢¡£±¾ÎĽ«ÉîÈë·ÖÎöFlinkµÄһЩ¹Ø¼ü¼¼ÊõÓëÌØÐÔ£¬Ï£ÍûÄܹ»°ïÖú¶ÁÕß¶ÔFlinkÓиü¼ÓÉîÈëµÄÁ˽⣬¶ÔÆäËû´óÊý¾Ýϵͳ¿ª·¢ÕßÒ²ÄÜÓÐËùñÔÒæ¡£±¾ÎļÙÉè¶ÁÕßÒѶÔMapReduce¡¢Spark¼°StormµÈ´óÊý¾Ý´¦Àí¿ò¼ÜÓÐËùÁ˽⣬ͬʱÊìϤÁ÷´¦ÀíÓëÅú´¦ÀíµÄ»ù±¾¸ÅÄî¡£

Flink¼ò½é

FlinkºËÐÄÊÇÒ»¸öÁ÷ʽµÄÊý¾ÝÁ÷Ö´ÐÐÒýÇæ£¬ÆäÕë¶ÔÊý¾ÝÁ÷µÄ·Ö²¼Ê½¼ÆËãÌṩÁËÊý¾Ý·Ö²¼¡¢Êý¾ÝͨÐÅÒÔ¼°ÈÝ´í»úÖÆµÈ¹¦ÄÜ¡£»ùÓÚÁ÷Ö´ÐÐÒýÇæ£¬FlinkÌṩÁËÖî¶à¸ü¸ß³éÏó²ãµÄAPIÒÔ±ãÓû§±àд·Ö²¼Ê½ÈÎÎñ£º

DataSet API£¬ ¶Ô¾²Ì¬Êý¾Ý½øÐÐÅú´¦Àí²Ù×÷£¬½«¾²Ì¬Êý¾Ý³éÏó³É·Ö²¼Ê½µÄÊý¾Ý¼¯£¬Óû§¿ÉÒÔ·½±ãµØÊ¹ÓÃFlinkÌṩµÄ¸÷ÖÖ²Ù×÷·û¶Ô·Ö²¼Ê½Êý¾Ý¼¯½øÐд¦Àí£¬Ö§³ÖJava¡¢ScalaºÍPython¡£

DataStream API£¬¶ÔÊý¾ÝÁ÷½øÐÐÁ÷´¦Àí²Ù×÷£¬½«Á÷ʽµÄÊý¾Ý³éÏó³É·Ö²¼Ê½µÄÊý¾ÝÁ÷£¬Óû§¿ÉÒÔ·½±ãµØ¶Ô·Ö²¼Ê½Êý¾ÝÁ÷½øÐи÷ÖÖ²Ù×÷£¬Ö§³ÖJavaºÍScala¡£

Table API£¬¶Ô½á¹¹»¯Êý¾Ý½øÐвéѯ²Ù×÷£¬½«½á¹¹»¯Êý¾Ý³éÏó³É¹ØÏµ±í£¬²¢Í¨¹ýÀàSQLµÄDSL¶Ô¹ØÏµ±í½øÐи÷ÖÖ²éѯ²Ù×÷£¬Ö§³ÖJavaºÍScala¡£

´ËÍ⣬Flink»¹Õë¶ÔÌØ¶¨µÄÓ¦ÓÃÁìÓòÌṩÁËÁìÓò¿â£¬ÀýÈ磺

Flink ML£¬FlinkµÄ»úÆ÷ѧϰ¿â£¬ÌṩÁË»úÆ÷ѧϰPipelines API²¢ÊµÏÖÁ˶àÖÖ»úÆ÷ѧϰËã·¨¡£

Gelly£¬FlinkµÄͼ¼ÆËã¿â£¬ÌṩÁËͼ¼ÆËãµÄÏà¹ØAPI¼°¶àÖÖͼ¼ÆËãË㷨ʵÏÖ¡£

FlinkµÄ¼¼ÊõÕ»Èçͼ1Ëùʾ£º

ͼ1 Flink¼¼ÊõÕ»

´ËÍ⣬FlinkÒ²¿ÉÒÔ·½±ãµØºÍHadoopÉú̬ȦÖÐÆäËûÏîÄ¿¼¯³É£¬ÀýÈçFlink¿ÉÒÔ¶ÁÈ¡´æ´¢ÔÚHDFS»òHBaseÖеľ²Ì¬Êý¾Ý£¬ÒÔKafka×÷ΪÁ÷ʽµÄÊý¾ÝÔ´£¬Ö±½ÓÖØÓÃMapReduce»òStorm´úÂ룬»òÊÇͨ¹ýYARNÉêÇ뼯Ⱥ×ÊÔ´µÈ¡£

ͳһµÄÅú´¦ÀíÓëÁ÷´¦Àíϵͳ

ÔÚ´óÊý¾Ý´¦ÀíÁìÓò£¬Åú´¦ÀíÈÎÎñÓëÁ÷´¦ÀíÈÎÎñÒ»°ã±»ÈÏΪÊÇÁ½ÖÖ²»Í¬µÄÈÎÎñ£¬Ò»¸ö´óÊý¾ÝÏîĿһ°ã»á±»Éè¼ÆÎªÖ»ÄÜ´¦ÀíÆäÖÐÒ»ÖÖÈÎÎñ£¬ÀýÈçApache Storm¡¢Apache SmazaÖ»Ö§³ÖÁ÷´¦ÀíÈÎÎñ£¬¶øAapche MapReduce¡¢Apache Tez¡¢Apache SparkÖ»Ö§³ÖÅú´¦ÀíÈÎÎñ¡£Spark StreamingÊÇApache SparkÖ®ÉÏÖ§³ÖÁ÷´¦ÀíÈÎÎñµÄ×Óϵͳ£¬¿´ËÆÒ»¸öÌØÀý£¬ÊµÔò²»È»¡ª¡ªSpark Streaming²ÉÓÃÁËÒ»ÖÖmicro-batchµÄ¼Ü¹¹£¬¼´°ÑÊäÈëµÄÊý¾ÝÁ÷ÇзֳÉϸÁ£¶ÈµÄbatch£¬²¢ÎªÃ¿Ò»¸öbatchÊý¾ÝÌá½»Ò»¸öÅú´¦ÀíµÄSparkÈÎÎñ£¬ËùÒÔSpark Streaming±¾ÖÊÉÏ»¹ÊÇ»ùÓÚSparkÅú´¦Àíϵͳ¶ÔÁ÷ʽÊý¾Ý½øÐд¦Àí£¬ºÍApache Storm¡¢Apache SmazaµÈÍêÈ«Á÷ʽµÄÊý¾Ý´¦Àí·½Ê½ÍêÈ«²»Í¬¡£Í¨¹ýÆäÁé»îµÄÖ´ÐÐÒýÇæ£¬FlinkÄܹ»Í¬Ê±Ö§³ÖÅú´¦ÀíÈÎÎñÓëÁ÷´¦ÀíÈÎÎñ¡£

ÔÚÖ´ÐÐÒýÇæÕâÒ»²ã£¬Á÷´¦ÀíϵͳÓëÅú´¦Àíϵͳ×î´ó²»Í¬ÔÚÓÚ½Úµã¼äµÄÊý¾Ý´«Ê䷽ʽ¡£¶ÔÓÚÒ»¸öÁ÷´¦Àíϵͳ£¬Æä½Úµã¼äÊý¾Ý´«ÊäµÄ±ê׼ģÐÍÊÇ£ºµ±Ò»ÌõÊý¾Ý±»´¦ÀíÍê³Éºó£¬ÐòÁл¯µ½»º´æÖУ¬È»ºóÁ¢¿Ìͨ¹ýÍøÂç´«Êäµ½ÏÂÒ»¸ö½Úµã£¬ÓÉÏÂÒ»¸ö½Úµã¼ÌÐø´¦Àí¡£¶ø¶ÔÓÚÒ»¸öÅú´¦Àíϵͳ£¬Æä½Úµã¼äÊý¾Ý´«ÊäµÄ±ê׼ģÐÍÊÇ£ºµ±Ò»ÌõÊý¾Ý±»´¦ÀíÍê³Éºó£¬ÐòÁл¯µ½»º´æÖУ¬²¢²»»áÁ¢¿Ìͨ¹ýÍøÂç´«Êäµ½ÏÂÒ»¸ö½Úµã£¬µ±»º´æÐ´Âú£¬¾Í³Ö¾Ã»¯µ½±¾µØÓ²ÅÌÉÏ£¬µ±ËùÓÐÊý¾Ý¶¼±»´¦ÀíÍê³Éºó£¬²Å¿ªÊ¼½«´¦ÀíºóµÄÊý¾Ýͨ¹ýÍøÂç´«Êäµ½ÏÂÒ»¸ö½Úµã¡£ÕâÁ½ÖÖÊý¾Ý´«ÊäģʽÊÇÁ½¸ö¼«¶Ë£¬¶ÔÓ¦µÄÊÇÁ÷´¦Àíϵͳ¶ÔµÍÑÓ³ÙµÄÒªÇóºÍÅú´¦Àíϵͳ¶Ô¸ßÍÌÍÂÁ¿µÄÒªÇó¡£FlinkµÄÖ´ÐÐÒýÇæ²ÉÓÃÁËÒ»ÖÖÊ®·ÖÁé»îµÄ·½Ê½£¬Í¬Ê±Ö§³ÖÁËÕâÁ½ÖÖÊý¾Ý´«ÊäÄ£ÐÍ¡£FlinkÒԹ̶¨µÄ»º´æ¿éΪµ¥Î»½øÐÐÍøÂçÊý¾Ý´«Ê䣬Óû§¿ÉÒÔͨ¹ý»º´æ¿é³¬Ê±ÖµÖ¸¶¨»º´æ¿éµÄ´«Êäʱ»ú¡£Èç¹û»º´æ¿éµÄ³¬Ê±ÖµÎª0£¬ÔòFlinkµÄÊý¾Ý´«Ê䷽ʽÀàËÆÉÏÎÄËùÌáµ½Á÷´¦ÀíϵͳµÄ±ê׼ģÐÍ£¬´Ëʱϵͳ¿ÉÒÔ»ñµÃ×îµÍµÄ´¦ÀíÑÓ³Ù¡£Èç¹û»º´æ¿éµÄ³¬Ê±ÖµÎªÎÞÏÞ´ó£¬ÔòFlinkµÄÊý¾Ý´«Ê䷽ʽÀàËÆÉÏÎÄËùÌáµ½Åú´¦ÀíϵͳµÄ±ê׼ģÐÍ£¬´Ëʱϵͳ¿ÉÒÔ»ñµÃ×î¸ßµÄÍÌÍÂÁ¿¡£Í¬Ê±»º´æ¿éµÄ³¬Ê±ÖµÒ²¿ÉÒÔÉèÖÃΪ0µ½ÎÞÏÞ´óÖ®¼äµÄÈÎÒâÖµ¡£»º´æ¿éµÄ³¬Ê±ãÐֵԽС£¬ÔòFlinkÁ÷´¦ÀíÖ´ÐÐÒýÇæµÄÊý¾Ý´¦ÀíÑÓ³ÙÔ½µÍ£¬µ«ÍÌÍÂÁ¿Ò²»á½µµÍ£¬·´Ö®ÒàÈ»¡£Í¨¹ýµ÷Õû»º´æ¿éµÄ³¬Ê±ãÐÖµ£¬Óû§¿É¸ù¾ÝÐèÇóÁé»îµØÈ¨ºâϵͳÑÓ³ÙºÍÍÌÍÂÁ¿¡£

ͼ2 FlinkÖ´ÐÐÒýÇæÊý¾Ý´«Êäģʽ

ÔÚͳһµÄÁ÷ʽִÐÐÒýÇæ»ù´¡ÉÏ£¬Flinkͬʱ֧³ÖÁËÁ÷¼ÆËãºÍÅú´¦Àí£¬²¢¶ÔÐÔÄÜ£¨ÑÓ³Ù¡¢ÍÌÍÂÁ¿µÈ£©ÓÐËù±£ÕÏ¡£Ïà¶ÔÓÚÆäËûÔ­ÉúµÄÁ÷´¦ÀíÓëÅú´¦Àíϵͳ£¬²¢Ã»ÓÐÒòΪͳһִÐÐÒýÇæ¶øÊܵ½Ó°Ïì´Ó¶ø´ó·ù¶È¼õÇáÁËÓû§°²×°¡¢²¿Êð¡¢¼à¿Ø¡¢Î¬»¤µÈ³É±¾¡£

FlinkÁ÷´¦ÀíµÄÈÝ´í»úÖÆ

¶ÔÓÚÒ»¸ö·Ö²¼Ê½ÏµÍ³À´Ëµ£¬µ¥¸ö½ø³Ì»òÊǽڵã±ÀÀ£µ¼ÖÂÕû¸öJobʧ°ÜÊǾ­³£·¢ÉúµÄÊÂÇ飬ÔÚÒì³£·¢Éúʱ²»»á¶ªÊ§Óû§Êý¾Ý²¢ÄÜ×Ô¶¯»Ö¸´²ÅÊÇ·Ö²¼Ê½ÏµÍ³±ØÐëÖ§³ÖµÄÌØÐÔÖ®Ò»¡£±¾½ÚÖ÷Òª½éÉÜFlinkÁ÷´¦ÀíϵͳÈÎÎñ¼¶±ðµÄÈÝ´í»úÖÆ¡£

Åú´¦Àíϵͳ±È½ÏÈÝÒ×ʵÏÖÈÝ´í»úÖÆ£¬ÓÉÓÚÎļþ¿ÉÒÔÖØ¸´·ÃÎÊ£¬µ±Ä³¸öÈÎÎñʧ°Üºó£¬ÖØÆô¸ÃÈÎÎñ¼´¿É¡£µ«Êǵ½ÁËÁ÷´¦Àíϵͳ£¬ÓÉÓÚÊý¾ÝÔ´ÊÇÎÞÏÞµÄÊý¾ÝÁ÷£¬´Ó¶øµ¼ÖÂÒ»¸öÁ÷´¦ÀíÈÎÎñÖ´Ðм¸¸öÔµÄÇé¿ö£¬½«ËùÓÐÊý¾Ý»º´æ»òÊdz־û¯£¬Áô´ýÒÔºóÖØ¸´·ÃÎÊ»ù±¾ÉÏÊDz»¿ÉÐеġ£Flink»ùÓÚ·Ö²¼Ê½¿ìÕÕÓë¿É²¿·ÖÖØ·¢µÄÊý¾ÝԴʵÏÖÁËÈÝ´í¡£Óû§¿É×Ô¶¨Òå¶ÔÕû¸öJob½øÐпìÕÕµÄʱ¼ä¼ä¸ô£¬µ±ÈÎÎñʧ°Üʱ£¬Flink»á½«Õû¸öJob»Ö¸´µ½×î½üÒ»´Î¿ìÕÕ£¬²¢´ÓÊý¾ÝÔ´ÖØ·¢¿ìÕÕÖ®ºóµÄÊý¾Ý¡£FlinkµÄ·Ö²¼Ê½¿ìÕÕʵÏÖ½è¼øÁËChandyºÍLamportÔÚ1985Äê·¢±íµÄһƪ¹ØÓÚ·Ö²¼Ê½¿ìÕÕµÄÂÛÎÄ£¬ÆäʵÏÖµÄÖ÷Ҫ˼ÏëÈçÏ£º

°´ÕÕÓû§×Ô¶¨ÒåµÄ·Ö²¼Ê½¿ìÕÕ¼ä¸ôʱ¼ä£¬Flink»á¶¨Ê±ÔÚËùÓÐÊý¾ÝÔ´ÖвåÈëÒ»ÖÖÌØÊâµÄ¿ìÕÕ±ê¼ÇÏûÏ¢£¬ÕâЩ¿ìÕÕ±ê¼ÇÏûÏ¢ºÍÆäËûÏûÏ¢Ò»ÑùÔÚDAGÖÐÁ÷¶¯£¬µ«ÊDz»»á±»Óû§¶¨ÒåµÄÒµÎñÂß¼­Ëù´¦Àí£¬Ã¿Ò»¸ö¿ìÕÕ±ê¼ÇÏûÏ¢¶¼½«ÆäËùÔÚµÄÊý¾ÝÁ÷·Ö³ÉÁ½²¿·Ö£º±¾´Î¿ìÕÕÊý¾ÝºÍÏ´οìÕÕÊý¾Ý¡£

ͼ3 Flink°üº¬¿ìÕÕ±ê¼ÇÏûÏ¢µÄÏûÏ¢Á÷

¿ìÕÕ±ê¼ÇÏûÏ¢ÑØ×ÅDAGÁ÷¾­¸÷¸ö²Ù×÷·û£¬µ±²Ù×÷·û´¦Àíµ½¿ìÕÕ±ê¼ÇÏûϢʱ£¬»á¶Ô×Ô¼ºµÄ״̬½øÐпìÕÕ£¬²¢´æ´¢ÆðÀ´¡£µ±Ò»¸ö²Ù×÷·ûÓжà¸öÊäÈëµÄʱºò£¬Flink»á½«ÏȵִïµÄ¿ìÕÕ±ê¼ÇÏûÏ¢¼°ÆäÖ®ºóµÄÏûÏ¢»º´æÆðÀ´£¬µ±ËùÓеÄÊäÈëÖжÔÓ¦¸Ã´Î¿ìÕյĿìÕÕ±ê¼ÇÏûϢȫ²¿µÖ´ïºó£¬²Ù×÷·û¶Ô×Ô¼ºµÄ״̬¿ìÕÕ²¢´æ´¢£¬Ö®ºó´¦ÀíËùÓпìÕÕ±ê¼ÇÏûÏ¢Ö®ºóµÄÒÑ»º´æÏûÏ¢¡£²Ù×÷·û¶Ô×Ô¼ºµÄ״̬¿ìÕÕ²¢´æ´¢¿ÉÒÔÊÇÒì²½ÓëÔöÁ¿µÄ²Ù×÷£¬²¢²»ÐèÒª×èÈûÏûÏ¢µÄ´¦Àí¡£·Ö²¼Ê½¿ìÕÕµÄÁ÷³ÌÈçͼ4Ëùʾ£º

ͼ4 Flink·Ö²¼Ê½¿ìÕÕÁ÷³Ìͼ

µ±ËùÓеÄData Sink£¨ÖÕµã²Ù×÷·û£©¶¼ÊÕµ½¿ìÕÕ±ê¼ÇÐÅÏ¢²¢¶Ô×Ô¼ºµÄ״̬¿ìÕպʹ洢ºó£¬Õû¸ö·Ö²¼Ê½¿ìÕÕ¾ÍÍê³ÉÁË£¬Í¬Ê±Í¨ÖªÊý¾ÝÔ´ÊͷŸÿìÕÕ±ê¼ÇÏûϢ֮ǰµÄËùÓÐÏûÏ¢¡£ÈôÖ®ºó·¢Éú½Úµã±ÀÀ£µÈÒì³£Çé¿öʱ£¬Ö»ÐèÒª»Ö¸´Ö®Ç°´æ´¢µÄ·Ö²¼Ê½¿ìÕÕ״̬£¬²¢´ÓÊý¾ÝÔ´ÖØ·¢¸Ã¿ìÕÕÒÔºóµÄÏûÏ¢¾Í¿ÉÒÔÁË¡£

Exactly-OnceÊÇÁ÷´¦ÀíϵͳÐèÒªÖ§³ÖµÄÒ»¸ö·Ç³£ÖØÒªµÄÌØÐÔ£¬Ëü±£Ö¤Ã¿Ò»ÌõÏûÏ¢Ö»±»Á÷´¦Àíϵͳ´¦ÀíÒ»´Î£¬Ðí¶àÁ÷´¦ÀíÈÎÎñµÄÒµÎñÂß¼­¶¼ÒÀÀµÓÚExactly-OnceÌØÐÔ¡£Ïà¶ÔÓÚAt-Least-Once»òÊÇAt-Most-Once, Exactly-OnceÌØÐÔ¶ÔÁ÷´¦ÀíϵͳµÄÒªÇó¸üΪÑϸñ£¬ÊµÏÖÒ²¸ü¼ÓÀ§ÄÑ¡£Flink»ùÓÚ·Ö²¼Ê½¿ìÕÕʵÏÖÁËExactly-OnceÌØÐÔ¡£

Ïà¶ÔÓÚÆäËûÁ÷´¦ÀíϵͳµÄÈÝ´í·½°¸£¬Flink»ùÓÚ·Ö²¼Ê½¿ìÕյķ½°¸ÔÚ¹¦ÄܺÍÐÔÄÜ·½Ãæ¶¼¾ßÓкܶàÓŵ㣬°üÀ¨£º

µÍÑÓ³Ù¡£ÓÉÓÚ²Ù×÷·û״̬µÄ´æ´¢¿ÉÒÔÒì²½£¬ËùÒÔ½øÐпìÕյĹý³Ì»ù±¾Éϲ»»á×èÈûÏûÏ¢µÄ´¦Àí£¬Òò´Ë²»»á¶ÔÏûÏ¢ÑÓ³Ù²úÉú¸ºÃæÓ°Ïì¡£

¸ßÍÌÍÂÁ¿¡£µ±²Ù×÷·û״̬½ÏÉÙʱ£¬¶ÔÍÌÍÂÁ¿»ù±¾Ã»ÓÐÓ°Ïì¡£µ±²Ù×÷·û״̬½Ï¶àʱ£¬Ïà¶ÔÓÚÆäËûµÄÈÝ´í»úÖÆ£¬·Ö²¼Ê½¿ìÕÕµÄʱ¼ä¼ä¸ôÊÇÓû§×Ô¶¨ÒåµÄ£¬ËùÒÔÓû§¿ÉÒÔȨºâ´íÎó»Ö¸´Ê±¼äºÍÍÌÍÂÁ¿ÒªÇóÀ´µ÷Õû·Ö²¼Ê½¿ìÕÕµÄʱ¼ä¼ä¸ô¡£

ÓëÒµÎñÂß¼­µÄ¸ôÀë¡£FlinkµÄ·Ö²¼Ê½¿ìÕÕ»úÖÆÓëÓû§µÄÒµÎñÂß¼­ÊÇÍêÈ«¸ôÀëµÄ£¬Óû§µÄÒµÎñÂß¼­²»»áÒÀÀµ»òÊǶԷֲ¼Ê½¿ìÕÕ²úÉúÈκÎÓ°Ïì¡£

´íÎó»Ö¸´´ú¼Û¡£·Ö²¼Ê½¿ìÕÕµÄʱ¼ä¼ä¸ôÔ½¶Ì£¬´íÎó»Ö¸´µÄʱ¼äÔ½ÉÙ£¬ÓëÍÌÍÂÁ¿¸ºÏà¹Ø¡£

FlinkÁ÷´¦ÀíµÄʱ¼ä´°¿Ú

¶ÔÓÚÁ÷´¦ÀíϵͳÀ´Ëµ£¬Á÷ÈëµÄÏûÏ¢²»´æÔÚÉÏÏÞ£¬ËùÒÔ¶ÔÓھۺϻòÊÇÁ¬½ÓµÈ²Ù×÷£¬Á÷´¦ÀíϵͳÐèÒª¶ÔÁ÷ÈëµÄÏûÏ¢½øÐзֶΣ¬È»ºó»ùÓÚÿһ¶ÎÊý¾Ý½øÐоۺϻòÊÇÁ¬½Ó¡£ÏûÏ¢µÄ·Ö¶Î¼´³ÆÎª´°¿Ú£¬Á÷´¦Àíϵͳ֧³ÖµÄ´°¿ÚÓкܶàÀàÐÍ£¬×î³£¼ûµÄ¾ÍÊÇʱ¼ä´°¿Ú£¬»ùÓÚʱ¼ä¼ä¸ô¶ÔÏûÏ¢½øÐзֶδ¦Àí¡£±¾½ÚÖ÷Òª½éÉÜFlinkÁ÷´¦Àíϵͳ֧³ÖµÄ¸÷ÖÖʱ¼ä´°¿Ú¡£

¶ÔÓÚĿǰ´ó²¿·ÖÁ÷´¦ÀíϵͳÀ´Ëµ£¬Ê±¼ä´°¿ÚÒ»°ãÊǸù¾ÝTaskËùÔÚ½ÚµãµÄ±¾µØÊ±ÖÓ½øÐÐÇз֣¬ÕâÖÖ·½Ê½ÊµÏÖÆðÀ´±È½ÏÈÝÒ×£¬²»»á²úÉú×èÈû¡£µ«ÊÇ¿ÉÄÜÎÞ·¨Âú×ãijЩӦÓÃÐèÇ󣬱ÈÈ磺

ÏûÏ¢±¾Éí´øÓÐʱ¼ä´Á£¬Óû§Ï£Íû°´ÕÕÏûÏ¢±¾ÉíµÄʱ¼äÌØÐÔ½øÐзֶδ¦Àí¡£

ÓÉÓÚ²»Í¬½ÚµãµÄʱÖÓ¿ÉÄܲ»Í¬£¬ÒÔ¼°ÏûÏ¢ÔÚÁ÷¾­¸÷¸ö½ÚµãµÄÑÓ³Ù²»Í¬£¬ÔÚij¸ö½ÚµãÊôÓÚͬһ¸öʱ¼ä´°¿Ú´¦ÀíµÄÏûÏ¢£¬Á÷µ½ÏÂÒ»¸ö½Úµãʱ¿ÉÄܱ»Çзֵ½²»Í¬µÄʱ¼ä´°¿ÚÖУ¬´Ó¶ø²úÉú²»·ûºÏÔ¤ÆÚµÄ½á¹û¡£

FlinkÖ§³Ö3ÖÖÀàÐ͵Äʱ¼ä´°¿Ú£¬·Ö±ðÊÊÓÃÓÚÓû§¶ÔÓÚʱ¼ä´°¿Ú²»Í¬ÀàÐ͵ÄÒªÇó£º

Operator Time¡£¸ù¾ÝTaskËùÔÚ½ÚµãµÄ±¾µØÊ±ÖÓÀ´ÇзֵÄʱ¼ä´°¿Ú¡£

Event Time¡£ÏûÏ¢×Ô´øÊ±¼ä´Á£¬¸ù¾ÝÏûÏ¢µÄʱ¼ä´Á½øÐд¦Àí£¬È·±£Ê±¼ä´ÁÔÚͬһ¸öʱ¼ä´°¿ÚµÄËùÓÐÏûÏ¢Ò»¶¨»á±»ÕýÈ·´¦Àí¡£ÓÉÓÚÏûÏ¢¿ÉÄÜÂÒÐòÁ÷ÈëTask£¬ËùÒÔTaskÐèÒª»º´æµ±Ç°Ê±¼ä´°¿ÚÏûÏ¢´¦ÀíµÄ״̬£¬Ö±µ½È·ÈÏÊôÓÚ¸Ãʱ¼ä´°¿ÚµÄËùÓÐÏûÏ¢¶¼±»´¦Àí£¬²Å¿ÉÒÔÊÍ·Å£¬Èç¹ûÂÒÐòµÄÏûÏ¢Ñӳٺܸ߻áÓ°Ïì·Ö²¼Ê½ÏµÍ³µÄÍÌÍÂÁ¿ºÍÑÓ³Ù¡£

Ingress Time¡£ÓÐʱÏûÏ¢±¾Éí²¢²»´øÓÐʱ¼ä´ÁÐÅÏ¢£¬µ«Óû§ÒÀȻϣÍû°´ÕÕÏûÏ¢¶ø²»ÊǽڵãʱÖÓ»®·Öʱ¼ä´°¿Ú£¬ÀýÈç±ÜÃâÉÏÃæÌáµ½µÄµÚ¶þ¸öÎÊÌ⣬´Ëʱ¿ÉÒÔÔÚÏûÏ¢Ô´Á÷ÈëFlinkÁ÷´¦Àíϵͳʱ×Ô¶¯Éú³ÉÔöÁ¿µÄʱ¼ä´Á¸³ÓèÏûÏ¢£¬Ö®ºó´¦ÀíµÄÁ÷³ÌÓëEvent TimeÏàͬ¡£Ingress Time¿ÉÒÔ¿´³ÉÊÇEvent TimeµÄÒ»¸öÌØÀý£¬ÓÉÓÚÆäÔÚÏûÏ¢Ô´´¦Ê±¼ä´ÁÒ»¶¨ÊÇÓÐÐòµÄ£¬ËùÒÔÔÚÁ÷´¦ÀíϵͳÖУ¬Ïà¶ÔÓÚEvent Time£¬ÆäÂÒÐòµÄÏûÏ¢ÑÓ³Ù²»»áºÜ¸ß£¬Òò´Ë¶ÔFlink·Ö²¼Ê½ÏµÍ³µÄÍÌÍÂÁ¿ºÍÑÓ³ÙµÄÓ°ÏìÒ²»á¸üС¡£

Event Timeʱ¼ä´°¿ÚµÄʵÏÖ

Flink½è¼øÁËGoogleµÄMillWheelÏîÄ¿£¬Í¨¹ýWaterMarkÀ´Ö§³Ö»ùÓÚEvent TimeµÄʱ¼ä´°¿Ú¡£

µ±²Ù×÷·ûͨ¹ý»ùÓÚEvent TimeµÄʱ¼ä´°¿ÚÀ´´¦ÀíÊý¾Ýʱ£¬Ëü±ØÐëÔÚÈ·¶¨ËùÓÐÊôÓÚ¸Ãʱ¼ä´°¿ÚµÄÏûϢȫ²¿Á÷Èë´Ë²Ù×÷·ûºó²ÅÄÜ¿ªÊ¼Êý¾Ý´¦Àí¡£µ«ÊÇÓÉÓÚÏûÏ¢¿ÉÄÜÊÇÂÒÐòµÄ£¬ËùÒÔ²Ù×÷·ûÎÞ·¨Ö±½ÓÈ·ÈϺÎʱËùÓÐÊôÓÚ¸Ãʱ¼ä´°¿ÚµÄÏûϢȫ²¿Á÷Èë´Ë²Ù×÷·û¡£WaterMark°üº¬Ò»¸öʱ¼ä´Á£¬FlinkʹÓÃWaterMark±ê¼ÇËùÓÐСÓÚ¸Ãʱ¼ä´ÁµÄÏûÏ¢¶¼ÒÑÁ÷È룬FlinkµÄÊý¾ÝÔ´ÔÚÈ·ÈÏËùÓÐСÓÚij¸öʱ¼ä´ÁµÄÏûÏ¢¶¼ÒÑÊä³öµ½FlinkÁ÷´¦Àíϵͳºó£¬»áÉú³ÉÒ»¸ö°üº¬¸Ãʱ¼ä´ÁµÄWaterMark£¬²åÈëµ½ÏûÏ¢Á÷ÖÐÊä³öµ½FlinkÁ÷´¦ÀíϵͳÖУ¬Flink²Ù×÷·û°´ÕÕʱ¼ä´°¿Ú»º´æËùÓÐÁ÷ÈëµÄÏûÏ¢£¬µ±²Ù×÷·û´¦Àíµ½WaterMarkʱ£¬Ëü¶ÔËùÓÐСÓÚ¸ÃWaterMarkʱ¼ä´ÁµÄʱ¼ä´°¿ÚÊý¾Ý½øÐд¦Àí²¢·¢Ë͵½ÏÂÒ»¸ö²Ù×÷·û½Úµã£¬È»ºóÒ²½«WaterMark·¢Ë͵½ÏÂÒ»¸ö²Ù×÷·û½Úµã¡£

ΪÁ˱£Ö¤Äܹ»´¦ÀíËùÓÐÊôÓÚij¸öʱ¼ä´°¿ÚµÄÏûÏ¢£¬²Ù×÷·û±ØÐëµÈµ½´óÓÚÕâ¸öʱ¼ä´°¿ÚµÄWaterMarkÖ®ºó²ÅÄÜ¿ªÊ¼¶Ô¸Ãʱ¼ä´°¿ÚµÄÏûÏ¢½øÐд¦Àí£¬Ïà¶ÔÓÚ»ùÓÚOperator TimeµÄʱ¼ä´°¿Ú£¬FlinkÐèÒªÕ¼Óøü¶àÄڴ棬ÇÒ»áÖ±½ÓÓ°ÏìÏûÏ¢´¦ÀíµÄÑÓ³Ùʱ¼ä¡£¶Ô´Ë£¬Ò»¸ö¿ÉÄܵÄÓÅ»¯´ëÊ©ÊÇ£¬¶ÔÓÚ¾ÛºÏÀàµÄ²Ù×÷·û£¬¿ÉÒÔÌáǰ¶Ô²¿·ÖÏûÏ¢½øÐоۺϲÙ×÷£¬µ±ÓÐÊôÓÚ¸Ãʱ¼ä´°¿ÚµÄÐÂÏûÏ¢Á÷Èëʱ£¬»ùÓÚ֮ǰµÄ²¿·Ö¾ÛºÏ½á¹û¼ÌÐø¼ÆË㣬ÕâÑùµÄ»°£¬Ö»Ð軺´æÖÐ¼ä¼ÆËã½á¹û¼´¿É£¬ÎÞÐ軺´æ¸Ãʱ¼ä´°¿ÚµÄËùÓÐÏûÏ¢¡£

¶ÔÓÚ»ùÓÚEvent Timeʱ¼ä´°¿ÚµÄ²Ù×÷·ûÀ´Ëµ£¬Á÷ÈëWaterMarkµÄʱ¼ä´ÁÓ뵱ǰ½ÚµãµÄʱÖÓÒ»ÖÂÊÇ×î¼òµ¥ÀíÏëµÄ×´¿ö£¬µ«ÊÇÔÚʵ¼Ê»·¾³ÖÐÊDz»¿ÉÄܵģ¬ÓÉÓÚÏûÏ¢µÄÂÒÐòÒÔ¼°Ç°Ãæ½Úµã´¦ÀíЧÂʵIJ»Í¬£¬×ÜÊÇ»áÓÐijЩÏûÏ¢Á÷Èëʱ¼ä´óÓÚÆä±¾ÉíµÄʱ¼ä´Á£¬ÕæÊµWaterMarkʱ¼ä´ÁÓëÀíÏëÇé¿öÏÂWaterMarkʱ¼ä´ÁµÄ²î±ð³ÆÎªTime Skew£¬Èçͼ5Ëùʾ£º

ͼ5 WaterMarkµÄTime Skewͼ

Time Skew¾ö¶¨Á˸ÃWaterMarkÓëÉÏÒ»¸öWaterMarkÖ®¼äµÄʱ¼ä´°¿ÚËùÓÐÊý¾ÝÐèÒª»º´æµÄʱ¼ä£¬Time Skewʱ¼äÔ½³¤£¬¸Ãʱ¼ä´°¿ÚÊý¾ÝµÄÑÓ³ÙÔ½³¤£¬Õ¼ÓÃÄÚ´æµÄʱ¼äÒ²Ô½³¤£¬Í¬Ê±»á¶ÔÁ÷´¦ÀíϵͳµÄÍÌÍÂÁ¿²úÉú¸ºÃæÓ°Ïì¡£

»ùÓÚʱ¼ä´ÁµÄÅÅÐò

ÔÚÁ÷´¦ÀíϵͳÖУ¬ÓÉÓÚÁ÷ÈëµÄÏûÏ¢ÊÇÎÞÏ޵ģ¬ËùÒÔ¶ÔÏûÏ¢½øÐÐÅÅÐò»ù±¾Éϱ»ÈÏΪÊDz»¿ÉÐеġ£µ«ÊÇÔÚFlinkÁ÷´¦ÀíϵͳÖУ¬»ùÓÚWaterMark£¬FlinkʵÏÖÁË»ùÓÚʱ¼ä´ÁµÄÈ«¾ÖÅÅÐò¡£ÅÅÐòµÄʵÏÖ˼·ÈçÏ£ºÅÅÐò²Ù×÷·û»º´æËùÓÐÁ÷ÈëµÄÏûÏ¢£¬µ±Æä½ÓÊÕµ½WaterMarkʱ£¬¶Ôʱ¼ä´ÁСÓÚ¸ÃWaterMarkµÄÏûÏ¢½øÐÐÅÅÐò£¬²¢·¢Ë͵½ÏÂÒ»¸ö½Úµã£¬ÔÚ´ËÅÅÐò²Ù×÷·ûÖÐÊÍ·ÅËùÓÐʱ¼ä´ÁСÓÚ¸ÃWaterMarkµÄÏûÏ¢£¬¼ÌÐø»º´æÁ÷ÈëµÄÏûÏ¢£¬µÈ´ýÏÂÒ»¸öWaterMark´¥·¢ÏÂÒ»´ÎÅÅÐò¡£

ÓÉÓÚWaterMark±£Ö¤ÁËÔÚÆäÖ®ºó²»»á³öÏÖʱ¼ä´Á±ÈËüСµÄÏûÏ¢£¬ËùÒÔ¿ÉÒÔ±£Ö¤ÅÅÐòµÄÕýÈ·ÐÔ¡£ÐèҪעÒâµÄÊÇ£¬Èç¹ûÅÅÐò²Ù×÷·ûÓжà¸ö½Úµã£¬Ö»Äܱ£Ö¤Ã¿¸ö½ÚµãµÄÁ÷³öÏûÏ¢ÊÇÓÐÐòµÄ£¬½ÚµãÖ®¼äµÄÏûÏ¢²»Äܱ£Ö¤ÓÐÐò£¬ÒªÊµÏÖÈ«¾ÖÓÐÐò£¬ÔòÖ»ÄÜÓÐÒ»¸öÅÅÐò²Ù×÷·û½Úµã¡£

ͨ¹ýÖ§³Ö»ùÓÚEvent TimeµÄÏûÏ¢´¦Àí£¬FlinkÀ©Õ¹ÁËÆäÁ÷´¦ÀíϵͳµÄÓ¦Ó÷¶Î§£¬Ê¹µÃ¸ü¶àµÄÁ÷´¦ÀíÈÎÎñ¿ÉÒÔͨ¹ýFlinkÀ´Ö´ÐС£

¶¨ÖƵÄÄÚ´æ¹ÜÀí

FlinkÏîÄ¿»ùÓÚJava¼°ScalaµÈJVMÓïÑÔ£¬JVM±¾Éí×÷Ϊһ¸ö¸÷ÖÖÀàÐÍÓ¦ÓõÄÖ´ÐÐÆ½Ì¨£¬Æä¶ÔJava¶ÔÏóµÄ¹ÜÀíÒ²ÊÇ»ùÓÚͨÓõĴ¦Àí²ßÂÔ£¬ÆäÀ¬»ø»ØÊÕÆ÷ͨ¹ý¹ÀËãJava¶ÔÏóµÄÉúÃüÖÜÆÚ¶ÔJava¶ÔÏó½øÐÐÓÐЧÂʵĹÜÀí¡£

Õë¶Ô²»Í¬ÀàÐ͵ÄÓ¦Óã¬Óû§¿ÉÄÜÐèÒªÕë¶Ô¸ÃÀàÐÍÓ¦ÓõÄÌØµã£¬ÅäÖÃÕë¶ÔÐÔµÄJVM²ÎÊý¸üÓÐЧÂʵĹÜÀíJava¶ÔÏ󣬴ӶøÌá¸ßÐÔÄÜ¡£ÕâÖÖJVMµ÷ÓŵĺÚħ·¨ÐèÒªÓû§¶ÔÓ¦Óñ¾Éí¼°JVMµÄ¸÷²ÎÊýÓÐÉîÈëÁ˽⣬¼«´óµØÌá¸ßÁË·Ö²¼Ê½¼ÆËãÆ½Ì¨µÄµ÷ÓÅÃż÷¡£Flink¿ò¼Ü±¾ÉíÁË½â¼ÆËãÂß¼­Ã¿¸ö²½ÖèµÄÊý¾Ý´«Ê䣬Ïà±ÈÓÚJVMÀ¬»ø»ØÊÕÆ÷£¬ÆäÁ˽â¸ü¶àµÄJava¶ÔÏóÉúÃüÖÜÆÚ£¬´Ó¶øÎª¸üÓÐЧÂʵعÜÀíJava¶ÔÏóÌṩÁË¿ÉÄÜ¡£

JVM´æÔÚµÄÎÊÌâ

Java¶ÔÏó¿ªÏú

Ïà¶ÔÓÚc/c++µÈ¸ü¼Ó½Ó½üµ×²ãµÄÓïÑÔ£¬Java¶ÔÏóµÄ´æ´¢ÃܶÈÏà¶ÔÆ«µÍ£¬ÀýÈç[1]£¬¡°abcd¡±ÕâÑù¼òµ¥µÄ×Ö·û´®ÔÚUTF-8±àÂëÖÐÐèÒª4¸ö×Ö½Ú´æ´¢£¬µ«²ÉÓÃÁËUTF-16±àÂë´æ´¢×Ö·û´®µÄJavaÔòÐèÒª8¸ö×Ö½Ú£¬Í¬Ê±Java¶ÔÏó»¹ÓÐheaderµÈÆäËû¶îÍâÐÅÏ¢£¬Ò»¸ö4×Ö½Ú×Ö·û´®¶ÔÏóÔÚJavaÖÐÐèÒª48×ֽڵĿռäÀ´´æ´¢¡£¶ÔÓڴ󲿷ֵĴóÊý¾ÝÓ¦Óã¬ÄÚ´æ¶¼ÊÇϡȱ×ÊÔ´£¬¸üÓÐЧÂʵØÄÚ´æ´æ´¢£¬Òâζ×ÅCPUÊý¾Ý·ÃÎÊÍÌÍÂÁ¿¸ü¸ß£¬ÒÔ¼°¸üÉÙ´ÅÅÌÂ䵨µÄ´æÔÚ¡£

¶ÔÏó´æ´¢½á¹¹Òý·¢µÄcache miss

ΪÁË»º½âCPU´¦ÀíËÙ¶ÈÓëÄÚ´æ·ÃÎÊËٶȵIJî¾à[2]£¬ÏÖ´úCPUÊý¾Ý·ÃÎÊÒ»°ã¶¼»áÓж༶»º´æ¡£µ±´ÓÄÚ´æ¼ÓÔØÊý¾Ýµ½»º´æÊ±£¬Ò»°ãÊÇÒÔcache lineΪµ¥Î»¼ÓÔØÊý¾Ý£¬ËùÒÔµ±CPU·ÃÎʵÄÊý¾ÝÈç¹ûÊÇÔÚÄÚ´æÖÐÁ¬Ðø´æ´¢µÄ»°£¬·ÃÎʵÄЧÂÊ»á·Ç³£¸ß¡£Èç¹ûCPUÒª·ÃÎʵÄÊý¾Ý²»ÔÚµ±Ç°»º´æËùÓеÄcache lineÖУ¬ÔòÐèÒª´ÓÄÚ´æÖмÓÔØ¶ÔÓ¦µÄÊý¾Ý£¬Õâ±»³ÆÎªÒ»´Îcache miss¡£µ±cache miss·Ç³£¸ßµÄʱºò£¬CPU´ó²¿·ÖµÄʱ¼ä¶¼ÔڵȴýÊý¾Ý¼ÓÔØ£¬¶ø²»ÊÇÕæÕýµÄ´¦ÀíÊý¾Ý¡£Java¶ÔÏó²¢²»ÊÇÁ¬ÐøµÄ´æ´¢ÔÚÄÚ´æÉÏ£¬Í¬Ê±ºÜ¶àµÄJavaÊý¾Ý½á¹¹µÄÊý¾Ý¾Û¼¯ÐÔÒ²²»ºÃ¡£

´óÊý¾ÝµÄÀ¬»ø»ØÊÕ

JavaµÄÀ¬»ø»ØÊÕ»úÖÆÒ»Ö±ÈÃJava¿ª·¢ÕßÓÖ°®ÓÖºÞ£¬Ò»·½ÃæËüÃâÈ¥ÁË¿ª·¢Õß×Ô¼º»ØÊÕ×ÊÔ´µÄ²½Ö裬Ìá¸ßÁË¿ª·¢Ð§ÂÊ£¬¼õÉÙÁËÄÚ´æÐ¹Â©µÄ¿ÉÄÜ£¬ÁíÒ»·½ÃæÀ¬»ø»ØÊÕÒ²ÊÇJavaÓ¦ÓõIJ»¶¨Ê±Õ¨µ¯£¬ÓÐʱÃë¼¶ÉõÖÁÊÇ·ÖÖÓ¼¶µÄÀ¬»ø»ØÊÕ¼«´óÓ°ÏìÁËJavaÓ¦ÓõÄÐÔÄܺͿÉÓÃÐÔ¡£ÔÚʱÏÂÊý¾ÝÖÐÐÄ£¬´óÈÝÁ¿ÄÚ´æµÃµ½Á˹㷺µÄÓ¦Óã¬ÉõÖÁ³öÏÖÁ˵¥Ì¨»úÆ÷ÅäÖÃTBÄÚ´æµÄÇé¿ö£¬Í¬Ê±£¬´óÊý¾Ý·ÖÎöͨ³£»á±éÀúÕû¸öÔ´Êý¾Ý¼¯£¬¶ÔÊý¾Ý½øÐÐת»»¡¢ÇåÏ´¡¢´¦ÀíµÈ²½Öè¡£ÔÚÕâ¸ö¹ý³ÌÖУ¬»á²úÉúº£Á¿µÄJava¶ÔÏó£¬JVMµÄÀ¬»ø»ØÊÕÖ´ÐÐЧÂʶÔÐÔÄÜÓкܴóÓ°Ï졣ͨ¹ýJVM²ÎÊýµ÷ÓÅÌá¸ßÀ¬»ø»ØÊÕЧÂÊÐèÒªÓû§¶ÔÓ¦Óúͷֲ¼Ê½¼ÆËã¿ò¼ÜÒÔ¼°JVMµÄ¸÷²ÎÊýÓÐÉîÈëÁ˽⣬¶øÇÒÓÐʱºòÕâÒ²Ô¶Ô¶²»¹»¡£

OOMÎÊÌâ

OutOfMemoryErrorÊÇ·Ö²¼Ê½¼ÆËã¿ò¼Ü¾­³£»áÓöµ½µÄÎÊÌ⣬µ±JVMÖÐËùÓжÔÏó´óС³¬¹ý·ÖÅ䏸JVMµÄÄÚ´æ´óСʱ£¬¾Í»á³öÏÖOutOfMemoryError´íÎó£¬JVM±ÀÀ££¬·Ö²¼Ê½¿ò¼ÜµÄ½¡×³ÐÔºÍÐÔÄܶ¼»áÊܵ½Ó°Ï졣ͨ¹ýJVM¹ÜÀíÄڴ棬ͬʱÊÔͼ½â¾öOOMÎÊÌâµÄÓ¦Óã¬Í¨³£¶¼ÐèÒª¼ì²éJava¶ÔÏóµÄ´óС£¬²¢ÔÚijЩ´æ´¢Java¶ÔÏóÌØ±ð¶àµÄÊý¾Ý½á¹¹ÖÐÉèÖÃãÐÖµ½øÐпØÖÆ¡£µ«ÊÇJVM²¢Ã»ÓÐÌṩ¹Ù·½¼ì²éJava¶ÔÏó´óСµÄ¹¤¾ß£¬µÚÈý·½µÄ¹¤¾ßÀà¿â¿ÉÄÜÎÞ·¨×¼È·Í¨ÓõØÈ·¶¨Java¶ÔÏó´óС[6]¡£ÇÖÈëʽµÄãÐÖµ¼ì²éÒ²»áΪ·Ö²¼Ê½¼ÆËã¿ò¼ÜµÄʵÏÖÔö¼ÓºÜ¶à¶îÍâÓëÒµÎñÂß¼­Î޹صĴúÂë¡£

FlinkµÄ´¦Àí²ßÂÔ

ΪÁ˽â¾öÒÔÉÏÌáµ½µÄÎÊÌ⣬¸ßÐÔÄÜ·Ö²¼Ê½¼ÆËã¿ò¼Üͨ³£ÐèÒªÒÔϼ¼Êõ£º

¶¨ÖƵÄÐòÁл¯¹¤¾ß¡£ÏÔʽÄÚ´æ¹ÜÀíµÄǰÌá²½Öè¾ÍÊÇÐòÁл¯£¬½«Java¶ÔÏóÐòÁл¯³É¶þ½øÖÆÊý¾Ý´æ´¢ÔÚÄÚ´æÉÏ£¨on heap»òÊÇoff-heap£©¡£Í¨ÓõÄÐòÁл¯¿ò¼Ü£¬ÈçJavaĬÈÏʹÓÃjava.io.Serializable½«Java¶ÔÏó¼°Æä³ÉÔ±±äÁ¿µÄËùÓÐÔªÐÅÏ¢×÷ΪÆäÐòÁл¯Êý¾ÝµÄÒ»²¿·Ö£¬ÐòÁл¯ºóµÄÊý¾Ý°üº¬ÁËËùÓз´ÐòÁл¯ËùÐèµÄÐÅÏ¢¡£ÕâÔÚijЩ³¡¾°ÖÐÊ®·Ö±ØÒª£¬µ«ÊǶÔÓÚFlinkÕâÑùµÄ·Ö²¼Ê½¼ÆËã¿ò¼ÜÀ´Ëµ£¬ÕâЩԪÊý¾ÝÐÅÏ¢¿ÉÄÜÊÇÈßÓàÊý¾Ý¡£¶¨ÖƵÄÐòÁл¯¿ò¼Ü£¬ÈçHadoopµÄorg.apache.hadoop.io.WritableÐèÒªÓû§ÊµÏָýӿڣ¬²¢×Ô¶¨ÒåÀàµÄÐòÁл¯ºÍ·´ÐòÁл¯·½·¨¡£ÕâÖÖ·½Ê½Ð§ÂÊ×î¸ß£¬µ«ÐèÒªÓû§¶îÍâµÄ¹¤×÷£¬²»¹»ÓѺá£

ÏÔʽµÄÄÚ´æ¹ÜÀí¡£Ò»°ãͨÓõÄ×ö·¨ÊÇÅúÁ¿ÉêÇëºÍÊÍ·ÅÄڴ棬ÿ¸öJVMʵÀýÓÐÒ»¸öͳһµÄÄÚ´æ¹ÜÀíÆ÷£¬ËùÓÐÄÚ´æµÄÉêÇëºÍÊͷŶ¼Í¨¹ý¸ÃÄÚ´æ¹ÜÀíÆ÷½øÐС£Õâ¿ÉÒÔ±ÜÃâ³£¼ûµÄÄÚ´æË鯬ÎÊÌ⣬ͬʱÓÉÓÚÊý¾ÝÒÔ¶þ½øÖƵķ½Ê½´æ´¢£¬¿ÉÒÔ´ó´ó¼õÇáÀ¬»ø»ØÊÕѹÁ¦¡£

»º´æÓѺõÄÊý¾Ý½á¹¹ºÍËã·¨¡£¶ÔÓÚ¼ÆËãÃܼ¯µÄÊý¾Ý½á¹¹ºÍËã·¨£¬Ö±½Ó²Ù×÷ÐòÁл¯ºóµÄ¶þ½øÖÆÊý¾Ý£¬¶ø²»Êǽ«¶ÔÏó·´ÐòÁл¯ºóÔÙ½øÐвÙ×÷¡£Í¬Ê±£¬Ö»½«²Ù×÷Ïà¹ØµÄÊý¾ÝÁ¬Ðø´æ´¢£¬¿ÉÒÔ×î´ó»¯µÄÀûÓÃL1/L2/L3»º´æ£¬¼õÉÙCache missµÄ¸ÅÂÊ£¬ÌáÉýCPU¼ÆËãµÄÍÌÍÂÁ¿¡£ÒÔÅÅÐòΪÀý£¬ÓÉÓÚÅÅÐòµÄÖ÷Òª²Ù×÷ÊǶÔKey½øÐжԱȣ¬Èç¹û½«ËùÓÐÅÅÐòÊý¾ÝµÄKeyÓëValue·Ö¿ª²¢¶ÔKeyÁ¬Ðø´æ´¢£¬ÄÇô·ÃÎÊKeyʱµÄCacheÃüÖÐÂÊ»á´ó´óÌá¸ß¡£

¶¨ÖƵÄÐòÁл¯¹¤¾ß

·Ö²¼Ê½¼ÆËã¿ò¼Ü¿ÉÒÔʹÓö¨ÖÆÐòÁл¯¹¤¾ßµÄǰÌáÊÇÒª´ý´¦ÀíÊý¾ÝÁ÷ͨ³£ÊÇͬһÀàÐÍ£¬ÓÉÓÚÊý¾Ý¼¯¶ÔÏóµÄÀàÐ͹̶¨£¬´Ó¶ø¿ÉÒÔÖ»±£´æÒ»·Ý¶ÔÏóSchemaÐÅÏ¢£¬½ÚÊ¡´óÁ¿µÄ´æ´¢¿Õ¼ä¡£Í¬Ê±£¬¶ÔÓڹ̶¨´óСµÄÀàÐÍ£¬Ò²¿Éͨ¹ý¹Ì¶¨µÄÆ«ÒÆÎ»ÖôæÈ¡¡£ÔÚÐèÒª·ÃÎÊij¸ö¶ÔÏó³ÉÔ±±äÁ¿Ê±£¬Í¨¹ý¶¨ÖƵÄÐòÁл¯¹¤¾ß£¬²¢²»ÐèÒª·´ÐòÁл¯Õû¸öJava¶ÔÏ󣬶øÊÇÖ±½Óͨ¹ýÆ«ÒÆÁ¿£¬´Ó¶øÖ»ÐèÒª·´ÐòÁл¯Ìض¨µÄ¶ÔÏó³ÉÔ±±äÁ¿¡£Èç¹û¶ÔÏóµÄ³ÉÔ±±äÁ¿½Ï¶àʱ£¬Äܹ»´ó´ó¼õÉÙJava¶ÔÏóµÄ´´½¨¿ªÏú£¬ÒÔ¼°ÄÚ´æÊý¾ÝµÄ¿½±´´óС¡£FlinkÊý¾Ý¼¯¶¼Ö§³ÖÈÎÒâJava»òÊÇScalaÀàÐÍ£¬Í¨¹ý×Ô¶¯Éú³É¶¨ÖÆÐòÁл¯¹¤¾ß£¬¼È±£Ö¤ÁËAPI½Ó¿Ú¶ÔÓû§ÓѺ㨲»ÓÃÏñHadoopÄÇÑùÊý¾ÝÀàÐÍÐèÒª¼Ì³ÐʵÏÖorg.apache.hadoop.io.Writable½Ó¿Ú£©£¬Ò²´ïµ½Á˺ÍHadoopÀàËÆµÄÐòÁл¯Ð§ÂÊ¡£

Flink¶ÔÊý¾Ý¼¯µÄÀàÐÍÐÅÏ¢½øÐзÖÎö£¬È»ºó×Ô¶¯Éú³É¶¨ÖƵÄÐòÁл¯¹¤¾ßÀà¡£FlinkÖ§³ÖÈÎÒâµÄJava»òÊÇScalaÀàÐÍ£¬Í¨¹ýJava Reflection¿ò¼Ü·ÖÎö»ùÓÚJavaµÄFlink³ÌÐòUDF£¨User Define Function£©µÄ·µ»ØÀàÐ͵ÄÀàÐÍÐÅÏ¢£¬Í¨¹ýScala Compiler·ÖÎö»ùÓÚScalaµÄFlink³ÌÐòUDFµÄ·µ»ØÀàÐ͵ÄÀàÐÍÐÅÏ¢¡£ÀàÐÍÐÅÏ¢ÓÉTypeInformationÀà±íʾ£¬Õâ¸öÀàÓÐÖî¶à¾ßÌåʵÏÖÀ࣬ÀýÈ磺

BasicTypeInfoÈÎÒâJava»ù±¾ÀàÐÍ£¨×°°ü»òδװ°ü£©ºÍStringÀàÐÍ¡£

BasicArrayTypeInfoÈÎÒâJava»ù±¾ÀàÐÍÊý×飨װ°ü»òδװ°ü£©ºÍStringÊý×é¡£

WritableTypeInfoÈÎÒâHadoopµÄWritable½Ó¿ÚµÄʵÏÖÀà¡£

TupleTypeInfoÈÎÒâµÄFlink tupleÀàÐÍ(Ö§³ÖTuple1 to Tuple25)¡£ Flink tuplesÊǹ̶¨³¤¶È¹Ì¶¨ÀàÐ͵ÄJava TupleʵÏÖ¡£

CaseClassTypeInfoÈÎÒâµÄ Scala CaseClass(°üÀ¨ Scala tuples)¡£

PojoTypeInfoÈÎÒâµÄPOJO (Java or Scala)£¬ÀýÈçJava¶ÔÏóµÄËùÓгÉÔ±±äÁ¿£¬ÒªÃ´ÊÇpublicÐÞÊηû¶¨Ò壬ҪôÓÐgetter/setter·½·¨¡£

GenericTypeInfoÈÎÒâÎÞ·¨Æ¥Åä֮ǰ¼¸ÖÖÀàÐ͵ÄÀà¡£

ǰ6ÖÖÀàÐÍÊý¾Ý¼¯¼¸ºõ¸²¸ÇÁ˾ø´ó²¿·ÖµÄFlink³ÌÐò£¬Õë¶Ôǰ6ÖÖÀàÐÍÊý¾Ý¼¯£¬Flink½Ô¿ÉÒÔ×Ô¶¯Éú³É¶ÔÓ¦µÄTypeSerializer¶¨ÖÆÐòÁл¯¹¤¾ß£¬·Ç³£ÓÐЧÂʵضÔÊý¾Ý¼¯½øÐÐÐòÁл¯ºÍ·´ÐòÁл¯¡£¶ÔÓÚµÚ7ÖÖÀàÐÍ£¬FlinkʹÓÃKryo½øÐÐÐòÁл¯ºÍ·´ÐòÁл¯¡£´ËÍ⣬¶ÔÓڿɱ»ÓÃ×÷KeyµÄÀàÐÍ£¬Flink»¹Í¬Ê±×Ô¶¯Éú³ÉTypeComparator£¬ÓÃÀ´¸¨ÖúÖ±½Ó¶ÔÐòÁл¯ºóµÄ¶þ½øÖÆÊý¾ÝÖ±½Ó½øÐÐcompare¡¢hashµÈ²Ù×÷¡£¶ÔÓÚTuple¡¢CaseClass¡¢PojoµÈ×éºÏÀàÐÍ£¬Flink×Ô¶¯Éú³ÉµÄTypeSerializer¡¢TypeComparatorͬÑùÊÇ×éºÏµÄ£¬²¢°ÑÆä³ÉÔ±µÄÐòÁл¯/·´ÐòÁл¯´úÀí¸øÆä³ÉÔ±¶ÔÓ¦µÄTypeSerializer¡¢TypeComparator£¬Èçͼ6Ëùʾ£º

ͼ6 Flink×éºÏÀàÐÍÐòÁл¯

´ËÍâÈçÓÐÐèÒª£¬Óû§¿Éͨ¹ý¼¯³ÉTypeInformation½Ó¿Ú¶¨ÖÆÊµÏÖ×Ô¼ºµÄÐòÁл¯¹¤¾ß¡£

ÏÔʽµÄÄÚ´æ¹ÜÀí

À¬»ø»ØÊÕÊÇJVMÄÚ´æ¹ÜÀí»Ø±Ü²»Á˵ÄÎÊÌ⣬JDK8µÄG1Ëã·¨¸ÄÉÆÁËJVMÀ¬»ø»ØÊÕµÄЧÂʺͿÉÓ÷¶Î§£¬µ«¶ÔÓÚ´óÊý¾Ý´¦Àíʵ¼Ê»·¾³»¹Ô¶Ô¶²»¹»¡£ÕâÒ²ºÍÏÖÔÚ·Ö²¼Ê½¿ò¼ÜµÄ·¢Õ¹Ç÷ÊÆÓÐËù³åÍ»£¬Ô½À´Ô½¶àµÄ·Ö²¼Ê½¼ÆËã¿ò¼ÜÏ£Íû¾¡¿ÉÄÜ¶àµØ½«´ý´¦ÀíÊý¾Ý¼¯·ÅÈëÄڴ棬¶ø¶ÔÓÚJVMÀ¬»ø»ØÊÕÀ´Ëµ£¬ÄÚ´æÖÐJava¶ÔÏóÔ½ÉÙ¡¢´æ»îʱ¼äÔ½¶Ì£¬ÆäЧÂÊÔ½¸ß¡£Í¨¹ýJVM½øÐÐÄÚ´æ¹ÜÀíµÄ»°£¬OutOfMemoryErrorÒ²ÊÇÒ»¸öºÜÄѽâ¾öµÄÎÊÌ⡣ͬʱ£¬ÔÚJVMÄÚ´æ¹ÜÀíÖУ¬Java¶ÔÏóÓÐDZÔÚµÄË鯬»¯´æ´¢ÎÊÌ⣨Java¶ÔÏóËùÓÐÐÅÏ¢¿ÉÄÜÔÚÄÚ´æÖÐÁ¬Ðø´æ´¢£©£¬Ò²ÓпÉÄÜÔÚËùÓÐJava¶ÔÏó´óСûÓг¬¹ýJVM·ÖÅäÄÚ´æÊ±£¬³öÏÖOutOfMemoryErrorÎÊÌâ¡£Flink½«ÄÚ´æ·ÖΪ3¸ö²¿·Ö£¬Ã¿¸ö²¿·Ö¶¼Óв»Í¬ÓÃ;£º

Network buffers: һЩÒÔ32KB ByteÊý×éΪµ¥Î»µÄbuffer£¬Ö÷Òª±»ÍøÂçÄ£¿éÓÃÓÚÊý¾ÝµÄÍøÂç´«Êä¡£

Memory Manager pool´óÁ¿ÒÔ32KB ByteÊý×éΪµ¥Î»µÄÄÚ´æ³Ø£¬ËùÓеÄÔËÐÐʱËã·¨£¨ÀýÈçSort/Shuffle/Join£©¶¼´ÓÕâ¸öÄÚ´æ³ØÉêÇëÄڴ棬²¢½«ÐòÁл¯ºóµÄÊý¾Ý´æ´¢ÆäÖУ¬½áÊøºóÊÍ·Å»ØÄÚ´æ³Ø¡£

Remaining (Free) HeapÖ÷ÒªÁô¸øUDFÖÐÓû§×Ô¼º´´½¨µÄJava¶ÔÏó£¬ÓÉJVM¹ÜÀí¡£

Network buffersÔÚFlinkÖÐÖ÷Òª»ùÓÚNettyµÄÍøÂç´«Ê䣬ÎÞÐè¶à½²¡£Remaining HeapÓÃÓÚUDFÖÐÓû§×Ô¼º´´½¨µÄJava¶ÔÏó£¬ÔÚUDFÖУ¬Óû§Í¨³£ÊÇÁ÷ʽµÄ´¦ÀíÊý¾Ý£¬²¢²»ÐèÒªºÜ¶àÄڴ棬ͬʱFlinkÒ²²»¹ÄÀøÓû§ÔÚUDFÖлº´æºÜ¶àÊý¾Ý£¬ÒòΪÕâ»áÒýÆðÇ°ÃæÌáµ½µÄÖî¶àÎÊÌâ¡£Memory Manager pool£¨ÒÔºóÒÔÄÚ´æ³Ø´úÖ¸£©Í¨³£»áÅäÖÃΪ×î´óµÄÒ»¿éÄڴ棬½ÓÏÂÀ´»áÏêϸ½éÉÜ¡£

ÔÚFlinkÖУ¬ÄÚ´æ³ØÓɶà¸öMemorySegment×é³É£¬Ã¿¸öMemorySegment´ú±íÒ»¿éÁ¬ÐøµÄÄڴ棬µ×²ã´æ´¢ÊÇbyte[]£¬Ä¬ÈÏ32KB´óС¡£MemorySegmentÌṩÁ˸ù¾ÝÆ«ÒÆÁ¿·ÃÎÊÊý¾ÝµÄ¸÷ÖÖ·½·¨£¬Èçget/put int¡¢long¡¢float¡¢doubleµÈ£¬MemorySegmentÖ®¼äÊý¾Ý¿½±´µÈ·½·¨ºÍjava.nio.ByteBufferÀàËÆ¡£¶ÔÓÚFlinkµÄÊý¾Ý½á¹¹£¬Í¨³£°üÀ¨¶à¸öÏòÄÚ´æ³ØÉêÇëµÄMemeorySegment£¬ËùÓÐÒª´æÈëµÄ¶ÔÏóͨ¹ýTypeSerializerÐòÁл¯Ö®ºó£¬½«¶þ½øÖÆÊý¾Ý´æ´¢ÔÚMemorySegmentÖУ¬ÔÚÈ¡³öʱͨ¹ýTypeSerializer·´ÐòÁл¯¡£Êý¾Ý½á¹¹Í¨¹ýMemorySegmentÌṩµÄset/get·½·¨·ÃÎʾßÌåµÄ¶þ½øÖÆÊý¾Ý¡£FlinkÕâÖÖ¿´ÆðÀ´±È½Ï¸´ÔÓµÄÄÚ´æ¹ÜÀí·½Ê½´øÀ´µÄºÃ´¦Ö÷ÒªÓУº

¶þ½øÖƵÄÊý¾Ý´æ´¢´ó´óÌá¸ßÁËÊý¾Ý´æ´¢Ãܶȣ¬½ÚÊ¡ÁË´æ´¢¿Õ¼ä¡£

ËùÓеÄÔËÐÐʱÊý¾Ý½á¹¹ºÍËã·¨Ö»ÄÜͨ¹ýÄÚ´æ³ØÉêÇëÄڴ棬±£Ö¤ÁËÆäʹÓõÄÄÚ´æ´óСÊǹ̶¨µÄ£¬²»»áÒòΪÔËÐÐʱÊý¾Ý½á¹¹ºÍËã·¨¶ø·¢ÉúOOM¡£¶ÔÓڴ󲿷ֵķֲ¼Ê½¼ÆËã¿ò¼ÜÀ´Ëµ£¬Õⲿ·ÖÓÉÓÚÒª»º´æ´óÁ¿Êý¾Ý×îÓпÉÄܵ¼ÖÂOOM¡£

ÄÚ´æ³ØËäȻռ¾ÝÁ˴󲿷ÖÄڴ棬µ«ÆäÖеÄMemorySegmentÈÝÁ¿½Ï´ó£¨Ä¬ÈÏ32KB£©£¬ËùÒÔÄÚ´æ³ØÖеÄJava¶ÔÏóÆäʵºÜÉÙ£¬¶øÇÒÒ»Ö±±»ÄÚ´æ³ØÒýÓã¬ËùÓÐÔÚÀ¬»ø»ØÊÕʱºÜ¿ì½øÈë³Ö¾Ã´ú£¬´ó´ó¼õÇáÁËJVMÀ¬»ø»ØÊÕµÄѹÁ¦¡£

Remaining HeapµÄÄÚ´æËäÈ»ÓÉJVM¹ÜÀí£¬µ«ÊÇÓÉÓÚÆäÖ÷ÒªÓÃÀ´´æ´¢Óû§´¦ÀíµÄÁ÷ʽÊý¾Ý£¬ÉúÃüÖÜÆÚ·Ç³£¶Ì£¬ËٶȺܿìµÄMinor GC¾Í»áÈ«²¿»ØÊÕµô£¬Ò»°ã²»»á´¥·¢Full GC¡£

Flinkµ±Ç°µÄÄÚ´æ¹ÜÀíÔÚ×îµ×²ãÊÇ»ùÓÚbyte[]£¬ËùÒÔÊý¾Ý×îÖÕ»¹ÊÇon-heap£¬×î½üFlinkÔö¼ÓÁËoff-heapµÄÄÚ´æ¹ÜÀíÖ§³Ö¡£Flink off-heapµÄÄÚ´æ¹ÜÀíÏà¶ÔÓÚon-heapµÄÓŵãÖ÷ÒªÔÚÓÚ£º

Æô¶¯·ÖÅäÁË´óÄÚ´æ(ÀýÈç100G)µÄJVMºÜºÄ·Ñʱ¼ä£¬À¬»ø»ØÊÕÒ²ºÜÂý¡£Èç¹û²ÉÓÃoff-heap£¬Ê£ÏµÄNetwork bufferºÍRemaining heap¶¼»áºÜС£¬À¬»ø»ØÊÕÒ²²»Óÿ¼ÂÇMemorySegmentÖеÄJava¶ÔÏóÁË¡£

¸üÓÐЧÂʵÄIO²Ù×÷¡£ÔÚoff-heapÏ£¬½«MemorySegmentдµ½´ÅÅÌ»òÊÇÍøÂç¿ÉÒÔÖ§³Özeor-copy¼¼Êõ£¬¶øon-heapµÄ»°ÔòÖÁÉÙÐèÒªÒ»´ÎÄڴ濽±´¡£

off-heap¿ÉÓÃÓÚ´íÎó»Ö¸´£¬±ÈÈçJVM±ÀÀ££¬ÔÚon-heapʱÊý¾ÝÒ²ËæÖ®¶ªÊ§£¬µ«ÔÚoff-heapÏ£¬off-heapµÄÊý¾Ý¿ÉÄÜ»¹ÔÚ¡£´ËÍ⣬off-heapÉϵÄÊý¾Ý»¹¿ÉÒÔºÍÆäËû³ÌÐò¹²Ïí¡£

»º´æÓѺõļÆËã

´ÅÅÌIOºÍÍøÂçIO֮ǰһֱ±»ÈÏΪÊÇHadoopϵͳµÄÆ¿¾±£¬µ«ÊÇËæ×ÅSpark¡¢FlinkµÈÐÂÒ»´ú·Ö²¼Ê½¼ÆËã¿ò¼ÜµÄ·¢Õ¹£¬Ô½À´Ô½¶àµÄÇ÷ÊÆÊ¹µÃCPU/MemoryÖð½¥³ÉΪƿ¾±£¬ÕâЩÇ÷ÊÆ°üÀ¨£º

¸üÏȽøµÄIOÓ²¼þÖð½¥ÆÕ¼°¡£10GBÍøÂçºÍSSDÓ²Å̵ÈÒѾ­±»Ô½À´Ô½¶àµÄÊý¾ÝÖÐÐÄʹÓá£

¸ü¸ßЧµÄ´æ´¢¸ñʽ¡£Parquet£¬ORCµÈÁÐʽ´æ´¢±»Ô½À´Ô½¶àµÄHadoopÏîĿ֧³Ö£¬Æä·Ç³£¸ßЧµÄѹËõÐÔÄÜ´ó´ó¼õÉÙÁËÂ䵨´æ´¢µÄÊý¾ÝÁ¿¡£

¸ü¸ßЧµÄÖ´Ðмƻ®¡£ÀýÈçºÜ¶àSQLϵͳִÐмƻ®ÓÅ»¯Æ÷µÄFliter-Push-DownÓÅ»¯»á½«¹ýÂËÌõ¼þ¾¡¿ÉÄܵÄÌáǰ£¬ÉõÖÁÌáǰµ½ParquetµÄÊý¾Ý·ÃÎʲ㣬ʹµÃÔںܶàʵ¼ÊµÄ¹¤×÷¸ºÔØÖв¢²»ÐèÒªºÜ¶àµÄ´ÅÅÌIO¡£

ÓÉÓÚCPU´¦ÀíËٶȺÍÄÚ´æ·ÃÎÊËٶȵIJî¾à£¬ÌáÉýCPUµÄ´¦ÀíЧÂʵĹؼüÔÚÓÚ×î´ó»¯µÄÀûÓÃL1/L2/L3/Memory£¬¼õÉÙÈκβ»±ØÒªµÄCache miss¡£¶¨ÖƵÄÐòÁл¯¹¤¾ß¸øFlinkÌṩÁË¿ÉÄÜ£¬Í¨¹ý¶¨ÖƵÄÐòÁл¯¹¤¾ß£¬Flink·ÃÎʵĶþ½øÖÆÊý¾Ý±¾Éí£¬ÒòΪռÓÃÄÚ´æ½ÏС£¬´æ´¢ÃܶȱȽϴ󣬶øÇÒ»¹¿ÉÒÔÔÚÉè¼ÆÊý¾Ý½á¹¹ºÍË㷨ʱ¾¡Á¿Á¬Ðø´æ´¢£¬¼õÉÙÄÚ´æË鯬»¯¶ÔCacheÃüÖÐÂʵÄÓ°Ï죬ÉõÖÁ¸ü½øÒ»²½£¬Flink¿ÉÒÔÖ»Êǽ«ÐèÒª²Ù×÷µÄ²¿·ÖÊý¾Ý£¨ÈçÅÅÐòʱµÄKey£©Á¬Ðø´æ´¢£¬¶ø½«ÆäËû²¿·ÖµÄÊý¾Ý´æ´¢ÔÚÆäËûµØ·½£¬´Ó¶ø×î´ó¿ÉÄܵØÌáÉýCacheÃüÖеĸÅÂÊ¡£

ÒÔFlinkÖеÄÅÅÐòΪÀý£¬ÅÅÐòͨ³£ÊÇ·Ö²¼Ê½¼ÆËã¿ò¼ÜÖÐÒ»¸ö·Ç³£ÖصIJÙ×÷£¬Flinkͨ¹ýÌØÊâÉè¼ÆµÄÅÅÐòËã·¨»ñµÃÁ˷dz£ºÃµÄÐÔÄÜ£¬ÆäÅÅÐòËã·¨µÄʵÏÖÈçÏ£º

½«´ýÅÅÐòµÄÊý¾Ý¾­¹ýÐòÁл¯ºó´æ´¢ÔÚÁ½¸ö²»Í¬µÄMemorySegment¼¯ÖС£Êý¾ÝÈ«²¿µÄÐòÁл¯Öµ´æ·ÅÓÚÆäÖÐÒ»¸öMemorySegment¼¯ÖС£Êý¾ÝÐòÁл¯ºóµÄKeyºÍÖ¸ÏòµÚÒ»¸öMemorySegment¼¯ÖÐÖµµÄÖ¸Õë´æ·ÅÓÚµÚ¶þ¸öMemorySegment¼¯ÖС£

¶ÔµÚ¶þ¸öMemorySegment¼¯ÖеÄKey½øÐÐÅÅÐò£¬ÈçÐè½»»»KeyλÖã¬Ö»Ðè½»»»¶ÔÓ¦µÄKey+PointerµÄλÖ㬵ÚÒ»¸öMemorySegment¼¯ÖеÄÊý¾ÝÎÞÐè¸Ä±ä¡£ µ±±È½ÏÁ½¸öKey´óСʱ£¬TypeComparatorÌṩÁËÖ±½Ó»ùÓÚ¶þ½øÖÆÊý¾ÝµÄ¶Ô±È·½·¨£¬ÎÞÐè·´ÐòÁл¯ÈκÎÊý¾Ý¡£

ÅÅÐòÍê³Éºó£¬·ÃÎÊÊý¾Ýʱ£¬°´ÕÕµÚ¶þ¸öMemorySegment¼¯ÖÐKeyµÄ˳Ðò·ÃÎÊ£¬²¢Í¨¹ýPointerÖµÕÒµ½Êý¾ÝÔÚµÚÒ»¸öMemorySegment¼¯ÖеÄλÖã¬Í¨¹ýTypeSerializer·´ÐòÁл¯³ÉJava¶ÔÏ󷵻ء£

ͼ7 FlinkÅÅÐòËã·¨

ÕâÑùʵÏֵĺô¦ÓУº

ͨ¹ýKeyºÍFull data·ÖÀë´æ´¢µÄ·½Ê½¾¡Á¿½«±»²Ù×÷µÄÊý¾Ý×îС»¯£¬Ìá¸ßCacheÃüÖеĸÅÂÊ£¬´Ó¶øÌá¸ßCPUµÄÍÌÍÂÁ¿¡£

ÒÆ¶¯Êý¾Ýʱ£¬Ö»ÐèÒÆ¶¯Key+Pointer£¬¶øÎÞÐëÒÆ¶¯Êý¾Ý±¾Éí£¬´ó´ó¼õÉÙÁËÄڴ濽±´µÄÊý¾ÝÁ¿¡£

TypeComparatorÖ±½Ó»ùÓÚ¶þ½øÖÆÊý¾Ý½øÐвÙ×÷£¬½ÚÊ¡ÁË·´ÐòÁл¯µÄʱ¼ä¡£

ͨ¹ý¶¨ÖƵÄÄÚ´æ¹ÜÀí£¬Flinkͨ¹ý³ä·ÖÀûÓÃÄÚ´æÓëCPU»º´æ£¬´ó´óÌá¸ßÁËCPUµÄÖ´ÐÐЧÂÊ£¬Í¬Ê±ÓÉÓڴ󲿷ÖÄÚ´æ¶¼ÓÉ¿ò¼Ü×Ô¼º¿ØÖÆ£¬Ò²ºÜ´ó³Ì¶ÈÌáÉýÁËϵͳµÄ½¡×³ÐÔ£¬¼õÉÙÁËOOM³öÏֵĿÉÄÜ¡£

×ܽá

FlinkÊÇÒ»¸öÓµÓÐÖî¶àÌØÉ«µÄÏîÄ¿£¬°üÀ¨ÆäͳһµÄÅú´¦ÀíºÍÁ÷´¦ÀíÖ´ÐÐÒýÇæ£¬Í¨ÓôóÊý¾Ý¼ÆËã¿ò¼ÜÓ봫ͳÊý¾Ý¿âϵͳµÄ¼¼Êõ½áºÏ£¬ÒÔ¼°Á÷´¦ÀíϵͳµÄÖî¶à¼¼Êõ´´Ðµȣ¬ÒòΪƪ·ùÓÐÏÞ£¬Flink»¹ÓÐһЩÆäËûºÜÓÐÒâ˼µÄÌØÐÔûÓÐÏêϸ½éÉÜ£¬±ÈÈçDataSet API¼¶±ðµÄÖ´Ðмƻ®ÓÅ»¯Æ÷£¬Ô­ÉúµÄµü´ú²Ù×÷·ûµÈ£¬¸ÐÐËȤµÄ¶ÁÕß¿ÉÒÔͨ¹ýFlink¹ÙÍøÁ˽â¸ü¶àFlinkµÄÏêϸÄÚÈÝ¡£

 

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

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

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

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ