Apache Flink 是什么?
什么是Apache Flink?
「Apache Flink」是一个开源的分布式流处理平台。
它与类似的产品,如「Apache Storm」和「Apache Spark Streaming」一样(由于归属于同一个Apache项目,我也觉得出了太多类似的工具了)。
他与其他平台不同之处,如下所述。
-
- 高パフォーマンス&低レイテンシ(真のストリーム処理が可能)
-
- 耐障害性に優れる(自動でイベント処理継続)
- ストリーム処理、バッチ処理の両方をサポートし、高レベルのAPIが提供されるAll-in-One構成
Flink栈
以下是Flink的概述。
Flink不仅支持流处理,还支持批处理,同时提供了複合事件处理(CEP)、机器学习(ML)和类似于SQL的API。
在这方面,它与Spark相似。但是,Spark是从批处理演变为流处理,而Flink则相反,是从流处理演变为批处理。
才能或技能
在与其他平台进行比较时,最大的区别在于其卓越的容错性。
在Flink中,每个处理都是有状态的,并且在发生故障时,它具有根据该信息自动恢复处理的功能。
另外,我們還從Flink的文件中解釋了其特點。
https://flink.apache.org/features.html
在线流媒体 liú
一体化系统同时支持批处理与流处理
APIs和库
-
- 流数据应用程序
DataStream API支持函数式处理,可以实现灵活的窗口处理。
case class Word(word: String, freq: Long)
val texts: DataStream[String] = …
val counts = text
.flatMap { line => line.split(“\\W+”) }
.map { token => Word(token, 1) }
.keyBy(“word”)
.timeWindow(Time.seconds(5), Time.seconds(1))
.sum(“freq”)
批处理应用程序
DataSet API具有类型安全和易于维护的代码,支持各种键/值数据类型。
case class Page(pageId: Long, rank: Double)
case class Adjacency(id: Long, neighbors: Array[Long])
val result = initialRanks.iterate(30) { pages =>
pages.join(adjacency).where(“pageId”).equalTo(“pageId”) {
(page, adj, out : Collector[Page]) => {
out.collect(Page(page.id, 0.15 / numPages))
for (n <- adj.neighbors) {
out.collect(Page(n, 0.85*page.rank/adj.neighbors.length))
}
}
}
.groupBy(“pageId”).sum(“rank”)
库生态系统
Flink Stack提供了针对机器学习、图分析、关系数据等高级API。
生态系统
- Flink可以与其他进行数据处理的开源软件进行广泛集成。Flink可以在YARN上运行,与HDFS、Kafka以及与Hadoop相关的产品一起使用。