Apache Flink 是一個開源流處理框架,具有強大的流處理和批次能力。
了解有關 Flink 的更多信息,請訪問 https://flink.apache.org/
支援批次和資料流程式的流優先運行時
優雅流暢的 Java API
同時支援極高吞吐量和低事件延遲的運行時
基於資料流模型,支援 DataStream API 中的事件時間與無序處理
跨不同時間語意(事件時間、處理時間)的彈性視窗(時間、計數、會話、自訂觸發器)
具有一次性處理保證的容錯能力
串流媒體程式中的自然背壓
用於圖形處理(批次)、機器學習(批次)和複雜事件處理(串流)的庫
自訂記憶體管理,可在記憶體和核外資料處理演算法之間進行高效、穩健的切換
Apache Hadoop MapReduce 的相容層
與 YARN、HDFS、HBase 和 Apache Hadoop 生態系統的其他元件集成
// pojo class WordWithCount
public class WordWithCount {
public String word ;
public int count ;
public WordWithCount () {}
public WordWithCount ( String word , int count ) {
this . word = word ;
this . count = count ;
}
}
// main method
StreamExecutionEnvironment env = StreamExecutionEnvironment . getExecutionEnvironment ();
DataStreamSource < String > text = env . socketTextStream ( host , port );
DataStream < WordWithCount > windowCounts = text
. flatMap (
( FlatMapFunction < String , String >) ( line , collector )
-> Arrays . stream ( line . split ( " \ s" )). forEach ( collector :: collect )
). returns ( String . class )
. map ( word -> new WordWithCount ( word , 1 )). returns ( TypeInformation . of ( WordWithCount . class ))
. keyBy ( wordWithCnt -> wordWithCnt . word )
. window ( TumblingProcessingTimeWindows . of ( Duration . ofSeconds ( 5 )))
. sum ( "count" ). returns ( TypeInformation . of ( WordWithCount . class ));
windowCounts . print ();
env . execute ();
}
// pojo class WordWithCount
public class WordWithCount {
public String word ;
public int count ;
public WordWithCount () {}
public WordWithCount ( String word , int count ) {
this . word = word ;
this . count = count ;
}
}
// main method
StreamExecutionEnvironment env = StreamExecutionEnvironment . getExecutionEnvironment ();
env . setRuntimeMode ( RuntimeExecutionMode . BATCH );
FileSource < String > source = FileSource . forRecordStreamFormat ( new TextLineInputFormat (), new Path ( "MyInput.txt" )). build ();
DataStreamSource < String > text = env . fromSource ( source , WatermarkStrategy . noWatermarks (), "MySource" );
DataStream < WordWithCount > windowCounts = text
. flatMap (( FlatMapFunction < String , String >) ( line , collector ) -> Arrays
. stream ( line . split ( " \ s" ))
. forEach ( collector :: collect )). returns ( String . class )
. map ( word -> new WordWithCount ( word , 1 )). returns ( TypeInformation . of ( WordWithCount . class ))
. keyBy ( wordWintCount -> wordWintCount . word )
. sum ( "count" ). returns ( TypeInformation . of ( WordWithCount . class ));
windowCounts . print ();
env . execute ();
建構 Flink 的先決條件:
git clone https://github.com/apache/flink.git
cd flink
./mvnw clean package -DskipTests # this will take up to 10 minutes
Flink 現在已安裝在build-target
中。
Flink 提交者使用 IntelliJ IDEA 開發 Flink 程式碼庫。我們推薦 IntelliJ IDEA 來開發涉及 Scala 程式碼的專案。
IDE 的最低要求是:
IntelliJ IDE 開箱即用支援 Maven,並提供用於 Scala 開發的插件。
有關詳細信息,請參閱我們的 IntelliJ 設定指南。
注意:根據我們的經驗,此設定不適用於 Flink,因為與 Scala IDE 3.0.3 捆綁的舊 Eclipse 版本有缺陷,或與 Scala IDE 4.4.1 中捆綁的 Scala 版本不相容。
我們建議使用 IntelliJ 代替(見上文)
不要猶豫,快來詢問吧!
如果您需要任何協助,請聯絡郵件清單上的開發人員和社群。
如果您發現 Flink 中存在錯誤,請提出問題。
Apache Flink 的文件位於網站:https://flink.apache.org 或原始碼的docs/
目錄中。
這是一個活躍的開源專案。我們始終對想要使用該系統或為其做出貢獻的人開放。如果您正在尋找適合您技能的實施任務,請與我們聯絡。本文介紹如何為 Apache Flink 做出貢獻。
大多數 Flink 連接器已外部化到 Apache 軟體基金會下的各個儲存庫:
Apache Flink 是 Apache 軟體基金會 (ASF) 的開源專案。 Apache Flink 計畫源自於 Stratosphere 研究計畫。