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 研究项目。