Flinkのデータストリーミング ランタイムは、 ほんの少しの設定で高スループットレートと低レイテンシーを実現します。以下の図はストリーミングデータのシャッフルを必要とする分散項目カウントのタスクのパフォーマンスを示します。
Flink はEvent Time セマンティクスを使ったストリーム処理とウィンドウ化をサポートします。
Event time を使うと、イベントの到着が順番通りでは無い場合、およびイベントが遅れて到着する場合のストリームの計算が楽になります。
ストリーミングアプリケーションは計算の間に独自の状態を維持することができます。
Flinkのチェックポイント機構は、障害時の状態のための exactly once セマンティクスを確実にします。
Flink はデータ駆動ウィンドウと同様に、時間、回数、あるいはセッションのウィンドウをサポートします。
ウィンドウは洗練されたストリーミング パターンをサポートするために、柔軟な駆動条件を使ってカスタマイズすることができます。
データストリーミングアプリケーションは絶え間の無い(長時間)演算子を使って実行されます。
Flinkのストリーミング ランタイムは自然なフロー制御を持ちます: 遅いデータのsinkは、速いソースに圧力を掛けます。
Flinkの耐障害性機構は Chandy-Lamport 分散スナップショットに基づいています。
その仕組みは軽量で、システムは高スループットレートを維持し、同時に強力な一貫性保証を提供することができます。
Flinkは、データストリーミングアプリケーションとバッチ処理アプリケーションのために1つの共通のランタイムを使用します。
バッチ処理アプリケーションはストリーム処理アプリケーションの特別な場合として効果的に実行します。
Flink はJVM内に独自のメモリ管理を実装します。
Applications scale to data sizes beyond main memory and experience less garbage collection overhead.R
Flinkは(機械学習およびグラフ解析にあるような)繰り返しの計算のための専用のサポートを持ちます。
Deltaイテレーションは高速な収束のために計算上の依存性を利用することができます。
Batch programs are automatically optimized to exploit situations where expensive operations (like shuffles and sorts) can be avoided, and when intermediate data should be cached.
DataStream API は、ユーザ定義の状態と柔軟なウィンドウを使って、データストリーム上で実用的な変換をサポートします。
例では、テキストのデータストリームの単語の出現のスライドするヒストグラムを計算する方法を示します。
FlinkのデータストリームAPIの WindowWordCount
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")
Flinkの DataSet API を使ってJavaあるいはScalaで綺麗なタイプセーフおよび維持可能なコードを書くことができます。それはkey/valueペアを超えた広範囲のデータタイプと豊富なオペレータをサポートします。
例では、グラフのためのページランクアルゴリズムの主要なループを示します。
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のスタックは異なる使用方法のための高レベルのAPIを持つライブラリを提供します: 機械学習、グラフ解析、および関連データ処理。
現在のところライブラリはbeta 状態で、猛烈に開発されています。
Flinkはオープンソースのデータ処理エコシステムの他の多くのプロジェクトと統合されます。
Flink runs on YARN, works with HDFS, streams data from Kafka, can execute Hadoop program code, and connects to various other data storage systems.