±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁ˶Ô
Flink ×öÁËÒ»¸öÏêϸµÄ½éÉÜ£¬½« Flink µÄ¸ÅÄî¡¢ÌØµãµÈ×öÁËÏêϸÃèÊö¡£Ï£Íû¶ÔÄãÓаïÖú¡£
±¾ÎÄÀ´×ÔËѺü£¬ÓÉ»ðÁú¹ûÈí¼þLinda±à¼¡¢ÍƼö¡£ |
|
ǰÑÔ
Ëæ×ÅÕâЩÄê´óÊý¾ÝµÄ·ÉËÙ·¢Õ¹£¬Ò²³öÏÖÁ˲»ÉÙ¼ÆËãµÄ¿ò¼Ü£¨Hadoop¡¢Storm¡¢Spark¡¢Flink£©¡£ÔÚÍøÉÏÓÐÈ˽«´óÊý¾Ý¼ÆËãÒýÇæµÄ·¢Õ¹·ÖΪËĸö½×¶Î¡£
µÚÒ»´ú£ºHadoop ³ÐÔØµÄ MapReduce
µÚ¶þ´ú£ºÖ§³Ö DAG£¨ÓÐÏòÎÞ»·Í¼£©¿ò¼ÜµÄ¼ÆËãÒýÇæ Tez ºÍ Oozie£¬Ö÷Òª»¹ÊÇÅú´¦ÀíÈÎÎñ
µÚÈý´ú£ºÖ§³Ö Job ÄÚ²¿µÄ DAG£¨ÓÐÏòÎÞ»·Í¼£©£¬ÒÔ Spark Ϊ´ú±í
µÚËÄ´ú£º´óÊý¾Ýͳһ¼ÆËãÒýÇæ£¬°üÀ¨Á÷´¦Àí¡¢Åú´¦Àí¡¢AI¡¢Machine Learning¡¢Í¼¼ÆËãµÈ£¬ÒÔ
Flink Ϊ´ú±í
»òÐí»áÓÐÈ˲»Í¬ÒâÒÔÉϵķÖÀ࣬ÎÒ¾õµÃÆäʵÕâ²¢²»ÖØÒªµÄ£¬ÖØÒªµÄÊÇÌå»á¸÷¸ö¿ò¼ÜµÄ²îÒ죬ÒÔ¼°¸üÊʺϵij¡¾°¡£²¢½øÐÐÀí½â£¬Ã»ÓÐÄÄÒ»¸ö¿ò¼Ü¿ÉÒÔÍêÃÀµÄÖ§³ÖËùÓеij¡¾°£¬Ò²¾Í²»¿ÉÄÜÓÐÈκÎÒ»¸ö¿ò¼ÜÄÜÍêȫȡ´úÁíÒ»¸ö¡£
±¾ÎĽ«¶Ô Flink µÄÕûÌå¼Ü¹¹ºÍ Flink µÄ¶àÖÖÌØÐÔ×ö¸öÏêϸµÄ½éÉÜ£¡ÔÚ½² Flink ֮ǰµÄ»°£¬ÎÒÃÇÏÈÀ´¿´¿´
Êý¾Ý¼¯ÀàÐÍºÍ Êý¾ÝÔËËãÄ£Ð͵ÄÖÖÀà¡£
Êý¾Ý¼¯ÀàÐÍ
ÎÞÇîÊý¾Ý¼¯£ºÎÞÇîµÄ³ÖÐø¼¯³ÉµÄÊý¾Ý¼¯ºÏ
ÓнçÊý¾Ý¼¯£ºÓÐÏÞ²»»á¸Ä±äµÄÊý¾Ý¼¯ºÏ
ÄÇôÄÇЩ³£¼ûµÄÎÞÇîÊý¾Ý¼¯ÓÐÄÄÐ©ÄØ£¿
Óû§Óë¿Í»§¶ËµÄʵʱ½»»¥Êý¾Ý
Ó¦ÓÃʵʱ²úÉúµÄÈÕÖ¾
½ðÈÚÊг¡µÄʵʱ½»Ò׼Ǽ
¡
Êý¾ÝÔËËãÄ£ÐÍ
Á÷ʽ£ºÖ»ÒªÊý¾ÝÒ»Ö±ÔÚ²úÉú£¬¼ÆËã¾Í³ÖÐøµØ½øÐÐ
Åú´¦Àí£ºÔÚÔ¤Ïȶ¨ÒåµÄʱ¼äÄÚÔËÐмÆË㣬µ±¼ÆËãÍê³ÉʱÊͷżÆËã»ú×ÊÔ´
ÄÇôÎÒÃÇÔÙÀ´¿´¿´ Flink ËüÊÇÊ²Ã´ÄØ£¿
Flink ÊÇʲô£¿

Flink ÊÇÒ»¸öÕë¶ÔÁ÷Êý¾ÝºÍÅúÊý¾ÝµÄ·Ö²¼Ê½´¦ÀíÒýÇæ£¬´úÂëÖ÷ÒªÊÇÓÉ Java ʵÏÖ£¬²¿·Ö´úÂëÊÇ Scala¡£Ëü¿ÉÒÔ´¦ÀíÓнçµÄÅúÁ¿Êý¾Ý¼¯¡¢Ò²¿ÉÒÔ´¦ÀíÎÞ½çµÄʵʱÊý¾Ý¼¯¡£¶Ô
Flink ¶øÑÔ£¬ÆäËùÒª´¦ÀíµÄÖ÷Òª³¡¾°¾ÍÊÇÁ÷Êý¾Ý£¬ÅúÊý¾ÝÖ»ÊÇÁ÷Êý¾ÝµÄÒ»¸ö¼«ÏÞÌØÀý¶øÒÑ£¬ËùÒÔ Flink
Ò²ÊÇÒ»¿îÕæÕýµÄÁ÷ÅúͳһµÄ¼ÆËãÒýÇæ¡£

Flink ÌṩÁË State¡¢Checkpoint¡¢Time¡¢Window µÈ£¬ËüÃÇΪ Flink
ÌṩÁË»ùʯ£¬±¾ÆªÎÄÕÂÏÂÃæ»áÉÔ×÷½²½â£¬¾ßÌåÉî¶È·ÖÎöºóÃæ»áÓÐרÃŵÄÎÄÕÂÀ´½²½â¡£
Flink ÕûÌå½á¹¹

´ÓÏÂÖÁÉÏ£º
1¡¢²¿Êð£ºFlink Ö§³Ö±¾µØÔËÐУ¨IDE ÖÐÖ±½ÓÔËÐгÌÐò£©¡¢ÄÜÔÚ¶ÀÁ¢¼¯Èº£¨Standalone
ģʽ£©»òÕßÔÚ±» YARN¡¢Mesos¡¢K8s ¹ÜÀíµÄ¼¯ÈºÉÏÔËÐУ¬Ò²Äܲ¿ÊðÔÚÔÆÉÏ¡£
2¡¢ÔËÐУºFlink µÄºËÐÄÊÇ·Ö²¼Ê½Á÷ʽÊý¾ÝÒýÇæ£¬Òâζ×ÅÊý¾ÝÒÔÒ»´ÎÒ»¸öʼþµÄÐÎʽ±»´¦Àí¡£
3¡¢API£ºDataStream¡¢DataSet¡¢Table¡¢SQL API¡£
4¡¢À©Õ¹¿â£ºFlink »¹°üÀ¨ÓÃÓÚ CEP£¨¸´ÔÓʼþ´¦Àí£©¡¢»úÆ÷ѧϰ¡¢Í¼Ðδ¦ÀíµÈ³¡¾°¡£
Flink Ö§³Ö¶àÖÖ·½Ê½²¿Êð

Flink Ö§³Ö¶àÖÖģʽϵÄÔËÐС£
Local£ºÖ±½ÓÔÚ IDE ÖÐÔËÐÐ Flink Job ʱÔò»áÔÚ±¾µØÆô¶¯Ò»¸ö mini Flink
¼¯Èº
Standalone£ºÔÚ Flink Ŀ¼ÏÂÖ´ÐÐ bin/start-cluster.sh ½Å±¾Ôò»áÆô¶¯Ò»¸ö
Standalone ģʽµÄ¼¯Èº
YARN£ºYARN ÊÇ Hadoop ¼¯ÈºµÄ×ÊÔ´¹ÜÀíϵͳ£¬Ëü¿ÉÒÔÔÚȺ¼¯ÉÏÔËÐи÷ÖÖ·Ö²¼Ê½Ó¦ÓóÌÐò£¬Flink
¿ÉÓëÆäËûÓ¦Óò¢ÐÐÓÚ YARN ÖУ¬Flink on YARN µÄ¼Ü¹¹ÈçÏ£º

Kubernetes£ºKubernetes ÊÇ Google ¿ªÔ´µÄÈÝÆ÷¼¯Èº¹ÜÀíϵͳ£¬ÔÚ Docker
¼¼ÊõµÄ»ù´¡ÉÏ£¬ÎªÈÝÆ÷»¯µÄÓ¦ÓÃÌṩ²¿ÊðÔËÐС¢×ÊÔ´µ÷¶È¡¢·þÎñ·¢ÏֺͶ¯Ì¬ÉìËõµÈһϵÁÐÍêÕû¹¦ÄÜ£¬Ìá¸ßÁË´ó¹æÄ£ÈÝÆ÷¼¯Èº¹ÜÀíµÄ±ã½ÝÐÔ£¬Flink
Ò²Ö§³Ö²¿ÊðÔÚ Kubernetes ÉÏ£¬ÔÚ GitHub ¿´µ½ÓÐÏÂÃæÕâÖÖÔËÐмܹ¹µÄ¡£

ͨ³£ÉÏÃæËÄÖ־Ӷ࣬ÁíÍ⻹֧³Ö AWS¡¢MapR¡¢Aliyun OSS µÈ¡£
Flink ·Ö²¼Ê½ÔËÐÐ
Flink ×÷ÒµÌá½»¼Ü¹¹Á÷³Ì¿É¼ûÏÂͼ£º

1¡¢Program Code£ºÎÒÃDZàдµÄ Flink Ó¦ÓóÌÐò´úÂë
2¡¢Job Client£ºJob Client ²»ÊÇ Flink ³ÌÐòÖ´ÐеÄÄÚ²¿²¿·Ö£¬µ«ËüÊÇÈÎÎñÖ´ÐÐµÄÆðµã¡£Job
Client ¸ºÔð½ÓÊÜÓû§µÄ³ÌÐò´úÂ룬Ȼºó´´½¨Êý¾ÝÁ÷£¬½«Êý¾ÝÁ÷Ìá½»¸ø Job Manager ÒÔ±ã½øÒ»²½Ö´ÐС£Ö´ÐÐÍê³Éºó£¬Job
Client ½«½á¹û·µ»Ø¸øÓû§
3¡¢Job Manager£ºÖ÷½ø³Ì£¨Ò²³ÆÎª×÷Òµ¹ÜÀíÆ÷£©Ðµ÷ºÍ¹ÜÀí³ÌÐòµÄÖ´ÐС£ËüµÄÖ÷ÒªÖ°Ôð°üÀ¨°²ÅÅÈÎÎñ£¬¹ÜÀí
checkpoint £¬¹ÊÕϻָ´µÈ¡£»úÆ÷¼¯ÈºÖÐÖÁÉÙÒªÓÐÒ»¸ö master£¬master ¸ºÔðµ÷¶È task£¬Ðµ÷
checkpoints ºÍÈÝÔÖ£¬¸ß¿ÉÓÃÉèÖõϰ¿ÉÒÔÓжà¸ö master£¬µ«Òª±£Ö¤Ò»¸öÊÇ leader,
ÆäËûÊÇ standby; Job Manager °üº¬ Actor system¡¢Scheduler¡¢Check
pointing Èý¸öÖØÒªµÄ×é¼þ
4¡¢Task Manager£º´Ó Job Manager ´¦½ÓÊÕÐèÒª²¿ÊðµÄ Task¡£Task Manager
ÊÇÔÚ JVM ÖеÄÒ»¸ö»ò¶à¸öÏß³ÌÖÐÖ´ÐÐÈÎÎñµÄ¹¤×÷½Úµã¡£ÈÎÎñÖ´ÐеIJ¢ÐÐÐÔÓÉÿ¸ö Task Manager
ÉÏ¿ÉÓõÄÈÎÎñ²Û£¨Slot ¸öÊý£©¾ö¶¨¡£Ã¿¸öÈÎÎñ´ú±í·ÖÅ䏸ÈÎÎñ²ÛµÄÒ»×é×ÊÔ´¡£ÀýÈ磬Èç¹û Task Manager
ÓÐËĸö²å²Û£¬ÄÇôËü½«ÎªÃ¿¸ö²å²Û·ÖÅä 25£¥ µÄÄÚ´æ¡£¿ÉÒÔÔÚÈÎÎñ²ÛÖÐÔËÐÐÒ»¸ö»ò¶à¸öÏ̡߳£Í¬Ò»²å²ÛÖеÄÏ̹߳²ÏíÏàͬµÄ
JVM¡£
ͬһ JVM ÖеÄÈÎÎñ¹²Ïí TCP Á¬½ÓºÍÐÄÌøÏûÏ¢¡£Task Manager µÄÒ»¸ö Slot ´ú±íÒ»¸ö¿ÉÓÃỊ̈߳¬¸ÃÏ߳̾ßÓй̶¨µÄÄڴ棬עÒâ
Slot Ö»¶ÔÄÚ´æ¸ôÀ룬ûÓÐ¶Ô CPU ¸ôÀ롣ĬÈÏÇé¿öÏ£¬Flink ÔÊÐí×ÓÈÎÎñ¹²Ïí Slot£¬¼´Ê¹ËüÃÇÊDz»Í¬
task µÄ subtask£¬Ö»ÒªËüÃÇÀ´×ÔÏàͬµÄ job¡£ÕâÖÖ¹²Ïí¿ÉÒÔÓиüºÃµÄ×ÊÔ´ÀûÓÃÂÊ¡£
Flink API

Flink ÌṩÁ˲»Í¬µÄ³éÏó¼¶±ðµÄ API ÒÔ¿ª·¢Á÷ʽ»òÅú´¦ÀíÓ¦Óá£
×îµ×²ãÌṩÁËÓÐ״̬Á÷¡£Ëü½«Í¨¹ý Process Function ǶÈëµ½ DataStream API
ÖС£ËüÔÊÐíÓû§¿ÉÒÔ×ÔÓɵش¦ÀíÀ´×ÔÒ»¸ö»ò¶à¸öÁ÷Êý¾ÝµÄʼþ£¬²¢Ê¹ÓÃÒ»ÖÂÐÔ¡¢ÈÝ´íµÄ״̬¡£³ý´ËÖ®Í⣬Óû§¿ÉÒÔ×¢²áʼþʱ¼äºÍ´¦Àíʼþ»Øµ÷£¬´Ó¶øÊ¹³ÌÐò¿ÉÒÔʵÏÖ¸´ÔӵļÆËã¡£
DataStream / DataSet API ÊÇ Flink ÌṩµÄºËÐÄ API £¬DataSet
´¦ÀíÓнçµÄÊý¾Ý¼¯£¬DataStream ´¦ÀíÓнç»òÕßÎÞ½çµÄÊý¾ÝÁ÷¡£Óû§¿ÉÒÔͨ¹ý¸÷ÖÖ·½·¨£¨map /
flatmap / window / keyby / sum / max / min / avg /
join µÈ£©½«Êý¾Ý½øÐÐת»»»òÕß¼ÆËã¡£
Table API ÊÇÒÔ±íΪÖÐÐĵÄÉùÃ÷ʽ DSL£¬ÆäÖбí¿ÉÄܻᶯ̬±ä»¯£¨ÔÚ±í´ïÁ÷Êý¾Ýʱ£©¡£Table
API ÌṩÁËÀýÈç select¡¢project¡¢join¡¢group-by¡¢aggregate µÈ²Ù×÷£¬Ê¹ÓÃÆðÀ´È´¸ü¼Ó¼ò½à£¨´úÂëÁ¿¸üÉÙ£©¡£
Äã¿ÉÒÔÔÚ±íÓë DataStream/DataSet Ö®¼äÎÞ·ìÇл»£¬Ò²ÔÊÐí³ÌÐò½« Table API
Óë DataStream ÒÔ¼° DataSet »ìºÏʹÓá£
Flink ÌṩµÄ×î¸ß²ã¼¶µÄ³éÏóÊÇ SQL ¡£ÕâÒ»²ã³éÏóÔÚÓï·¨Óë±í´ïÄÜÁ¦ÉÏÓë Table API ÀàËÆ£¬µ«ÊÇÊÇÒÔ
SQL²éѯ±í´ïʽµÄÐÎʽ±íÏÖ³ÌÐò¡£SQL ³éÏóÓë Table API ½»»¥ÃÜÇУ¬Í¬Ê± SQL ²éѯ¿ÉÒÔÖ±½ÓÔÚ
Table API ¶¨ÒåµÄ±íÉÏÖ´ÐС£
Flink ³ÌÐòÓëÊý¾ÝÁ÷½á¹¹


Ò»¸öÍêÕûµÄ Flink Ó¦ÓóÌÐò½á¹¹¾ÍÊÇÈçÉÏÁ½Í¼Ëùʾ£º
1¡¢Source£ºÊý¾ÝÊäÈ룬Flink ÔÚÁ÷´¦ÀíºÍÅú´¦ÀíÉ쵀 source ´ó¸ÅÓÐ 4 Àࣺ»ùÓÚ±¾µØ¼¯ºÏµÄ
source¡¢»ùÓÚÎļþµÄ source¡¢»ùÓÚÍøÂçÌ×½Ó×ÖµÄ source¡¢×Ô¶¨ÒåµÄ source¡£×Ô¶¨ÒåµÄ
source ³£¼ûµÄÓÐ Apache kafka¡¢Amazon Kinesis Streams¡¢RabbitMQ¡¢Twitter
Streaming API¡¢Apache NiFi µÈ£¬µ±È»ÄãÒ²¿ÉÒÔ¶¨Òå×Ô¼ºµÄ source¡£
2¡¢Transformation£ºÊý¾Ýת»»µÄ¸÷ÖÖ²Ù×÷£¬ÓÐ Map / FlatMap / Filter
/ KeyBy / Reduce / Fold / Aggregations / Window /
WindowAll / Union / Window join / Split / Select /
Project µÈ£¬²Ù×÷ºÜ¶à£¬¿ÉÒÔ½«Êý¾Ýת»»¼ÆËã³ÉÄãÏëÒªµÄÊý¾Ý¡£
3¡¢Sink£ºÊý¾ÝÊä³ö£¬Flink ½«×ª»»¼ÆËãºóµÄÊý¾Ý·¢Ë͵ĵص㠣¬Äã¿ÉÄÜÐèÒª´æ´¢ÏÂÀ´£¬Flink
³£¼ûµÄ Sink ´ó¸ÅÓÐÈçϼ¸ÀࣺдÈëÎļþ¡¢´òÓ¡³öÀ´¡¢Ð´Èë socket ¡¢×Ô¶¨ÒåµÄ sink ¡£×Ô¶¨ÒåµÄ
sink ³£¼ûµÄÓÐ Apache kafka¡¢RabbitMQ¡¢MySQL¡¢ElasticSearch¡¢Apache
Cassandra¡¢Hadoop FileSystem µÈ£¬Í¬ÀíÄãÒ²¿ÉÒÔ¶¨Òå×Ô¼ºµÄ sink¡£
Flink Ö§³Ö¶àÖÖÀ©Õ¹¿â
Flink ÓµÓзḻµÄ¿âÀ´½øÐлúÆ÷ѧϰ£¬Í¼Ðδ¦Àí£¬¹ØÏµÊý¾Ý´¦ÀíµÈ¡£ÓÉÓÚÆä¼Ü¹¹£¬ºÜÈÝÒ×Ö´Ðи´ÔÓµÄʼþ´¦ÀíºÍ¾¯±¨¡£
Flink Ìṩ¶àÖÖ Time ÓïÒå
Flink Ö§³Ö¶àÖÖ Time£¬±ÈÈç Event time¡¢Ingestion Time¡¢Processing
Time£¬ºóÃæµÄÎÄÕ [Flink ÖÐ Processing Time¡¢Event Time¡¢Ingestion
Time ¶Ô±È¼°ÆäʹÓó¡¾°·ÖÎö] ÖлáºÜÏêϸµÄ½²½â Flink ÖÐ Time µÄ¸ÅÄî¡£

Flink ÌṩÁé»îµÄ´°¿Ú»úÖÆ
Flink Ö§³Ö¶àÖÖ Window£¬±ÈÈç Time Window¡¢Count Window¡¢Session
Window£¬»¹Ö§³Ö×Ô¶¨Òå Window¡£ºóÃæµÄÎÄÕ [ÈçºÎʹÓà Flink Window ¼° Window
»ù±¾¸ÅÄîÓëʵÏÖÔÀí] ÖлáºÜÏêϸµÄ½²½â Flink ÖÐ Window µÄ¸ÅÄî¡£

Flink ²¢ÐеÄÖ´ÐÐÈÎÎñ
Flink µÄ³ÌÐòÄÚÔÚÊDz¢Ðкͷֲ¼Ê½µÄ£¬Êý¾ÝÁ÷¿ÉÒÔ±»·ÖÇø³É stream partitions£¬operators
±»»®·ÖΪ operator subtasks; ÕâЩ subtasks ÔÚ²»Í¬µÄ»úÆ÷»òÈÝÆ÷Öзֲ»Í¬µÄÏ̶߳ÀÁ¢ÔËÐУ»
operator subtasks µÄÊýÁ¿ÔÚ¾ßÌåµÄ operator ¾ÍÊDz¢ÐмÆËãÊý£¬³ÌÐò²»Í¬µÄ
operator ½×¶Î¿ÉÄÜÓв»Í¬µÄ²¢ÐÐÊý£»ÈçÏÂͼËùʾ£¬source operator µÄ²¢ÐÐÊýΪ 2£¬µ«×îºóµÄ
sink operator Ϊ 1£º

Flink Ö§³Ö״̬´æ´¢
Flink ÊÇÒ»¿îÓÐ״̬µÄÁ÷´¦Àí¿ò¼Ü£¬ËüÌṩÁ˷ḻµÄ״̬·ÃÎʽӿڣ¬°´ÕÕÊý¾ÝµÄ»®·Ö·½Ê½£¬¿ÉÒÔ·ÖΪ Keyed
State ºÍ Operator State£¬ÔÚ Keyed State ÖÐÓÖÌṩÁ˶àÖÖÊý¾Ý½á¹¹£º
ValueState
MapState
ListState
ReducingState
AggregatingState
ÁíÍâ״̬´æ´¢Ò²Ö§³Ö¶àÖÖ·½Ê½£º
MemoryStateBackend£º´æ´¢ÔÚÄÚ´æÖÐ
FsStateBackend£º´æ´¢ÔÚÎļþÖÐ
RocksDBStateBackend£º´æ´¢ÔÚ RocksDB ÖÐ
Flink Ö§³ÖÈÝ´í»úÖÆ
Flink ÖÐÖ§³ÖʹÓà Checkpoint À´Ìá¸ß³ÌÐòµÄ¿É¿¿ÐÔ£¬¿ªÆôÁË Checkpoint Ö®ºó£¬Flink
»á°´ÕÕÒ»¶¨µÄʱ¼ä¼ä¸ô¶Ô³ÌÐòµÄÔËÐÐ״̬½øÐб¸·Ý£¬µ±·¢Éú¹ÊÕÏʱ£¬Flink »á½«ËùÓÐÈÎÎñµÄ״̬»Ö¸´ÖÁ×îºóÒ»´Î·¢Éú
Checkpoint ÖеÄ״̬£¬²¢´ÓÄÇÀï¿ªÊ¼ÖØÐ¿ªÊ¼Ö´ÐС£
ÁíÍâ Flink »¹Ö§³Ö¸ù¾Ý Savepoint ´ÓÒÑÍ£Ö¹×÷ÒµµÄÔËÐÐ״̬½øÐлָ´£¬ÕâÖÖ·½Ê½ÐèҪͨ¹ýÃüÁî½øÐд¥·¢¡£
Flink ʵÏÖÁË×Ô¼ºµÄÄÚ´æ¹ÜÀí»úÖÆ
Flink ÔÚ JVM ÖÐÌṩÁË×Ô¼ºµÄÄÚ´æ¹ÜÀí£¬Ê¹Æä¶ÀÁ¢ÓÚ Java µÄĬÈÏÀ¬»øÊÕ¼¯Æ÷¡£Ëüͨ¹ýʹÓÃÉ¢ÁУ¬Ë÷Òý£¬»º´æºÍÅÅÐòÓÐЧµØ½øÐÐÄÚ´æ¹ÜÀí¡£ÎÒÃÇÔÚºóÃæµÄÎÄÕÂ
¡¶ÉîÈë̽Ë÷ Flink ÄÚ´æ¹ÜÀí»úÖÆ¡· »áÉîÈë½²½â Flink ÀïÃæµÄÄÚ´æ¹ÜÀí»úÖÆ¡£ |