【Flink】Apache Flink ~ 基礎知識編 ~

■ はじめに

Apache Flink (アパッチフリンク) ってのが
話題にあがったので、調べてみた。

目次

【0】Top Big Data frameworks in 2023
【1】Apache Flink
 0)公式サイト
 1)ライセンス
 2)最新バージョン
 3)プログラム言語
【2】その他の特徴
 1)Exactly-once(正確に1回だけ実行)
 2)他のツールとの統合
【3】他のフレームワークとの比較
 1)米Yahoo社のベンチマークテスト

【0】Top Big Data frameworks in 2023

https://jelvix.com/blog/top-5-big-data-frameworks

によると、2023年度 Top Big Data frameworks は、以下の通り。
(しかし、「Apache」ばっかだな、、、)
Rank Big Data framework name Link Memo
1 Apache Hadoop https://hadoop.apache.org/ お馴染みHadoop
2 MapReduce https://en.wikipedia.org/wiki/MapReduce Frameworkなのか?Hadoopのデータ処理エンジン
3 Apache Spark https://spark.apache.org/ こちらもお馴染みSpark。Hadoop基盤のデータ処理エンジン
4 Apache Hive https://hive.apache.org/ こちらもお馴染みHive。Hadoop 分散ファイルシステム (HDFS) に対して、SQL クエリで操作できるソフトウェア
5 Apache Storm https://storm.apache.org/ Twitter社で開発。耐障害性に優れた高速分散ストリーム処理エンジン
6 Apache Samza https://samza.apache.org/ LinkedIn社で開発。ストリーム処理向けの非同期処理フレームワーク
7 Apache Flink https://samza.apache.org/ ★今回のテーマ★
8 Apache Heron https://incubator.apache.org/projects/heron.html 左記サイトより「2023-01-18 Project was retired.」
9 Apache Kudu https://kudu.apache.org/ 高いスケーラビリティを持つ分散型列指向ストレージ。大量のデータをリアルタイムに更新することに特化
10 Presto https://prestodb.io/ Frameworkなのか?SQLクエリエンジン

【1】Apache Flink

* 分散ストリーム処理プラットフォーム
=> ストリームデータからデータを受け取り、
  ETL処理して、別のデータストアへデータを流すことができる
=> リアルタイムで分析するのに優れたプラットフォーム
=> まずは、以下のサイトのスライドを読んでみるといいかも。

https://www.acroquest.co.jp/technical/20190114/10603

動画

* なお、英語だが、Apache Flink が学べるコースがある

https://developer.confluent.io/courses/apache-flink/intro/

0)公式サイト

https://flink.apache.org/
日本語訳
http://mogile.web.fc2.com/flink/
Github
https://github.com/apache/flink

1)ライセンス

* Apache License Version 2

2)最新バージョン

* 2023-03-01現在では「v1.16.1」が最新
 => 以下を参照

https://flink.apache.org/downloads/

3)プログラム言語

開発された言語

* Scala製

使用可能な言語

* Scala (Java)
* Python
* SQL

【2】その他の特徴

1)Exactly-once(正確に1回だけ実行)

* 各イベントが正確に一度だけ配信されることを保証する仕組み
 => システム障害がクラスター全体に影響しないように設計されている
 => 障害発生後も、前回処理した内容を保持しており、
  その途中状態から、処理を再開することが可能

補足:At-most once / At-least once

* At-most once: 1回は実行を試みる (最大でも1回しか実行されない)

* At-least once: 少なくとも1回は実行する (複数回実行される場合もある)
 => AWS Lambda や AWS Glue は、こっち。

2)他のツールとの統合

KafkaやHadoopなどの他OSSのビッグデータ処理ツールとの統合が容易

AWSとの親和性

* EMR で動かすことが可能

https://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-flink.html

Amazon EMR Flink Remarks
emr 6.9.0 Flink 1.15.2 2023-03-01現在では「v1.16.1」が最新
emr-5.36.0 Flink 1.14.2

【4】他のフレームワークとの比較

1)米Yahoo社のベンチマークテスト

* 米Yahoo社が、Apache Flink, Spark, Stormでベンチマークテスト

https://yahooeng.tumblr.com/post/135321837876/benchmarking-streaming-computation-engines-at
https://github.com/yahoo/streaming-benchmarks

結論
https://www.infoq.com/jp/news/2016/02/yahoo-flink-spark-storm/

より抜粋
~~~~~~~~~~~~~
* Yahoo!によると,FlinkとStormの動作には類似点があり
 いずれもレイテンシが指数的に増加する場合の遅延率は99%まで
 ほぼ直線的に変化した
* ackを無効にした場合のStorm 0.11のパフォーマンスは良好でFlinkを凌駕した。
 しかしYahoo!によると
 “ackを無効にした状態ではタプルエラーの通知や処理も無効”になる
~~~~~~~~~~~~~
 => Yahooは、自分たちが採用しているStormの有効性を強調したいのだろうけど
  “ackを無効にした状態ではタプルエラーの通知や処理も無効”じゃ実質使えないから
  やっぱり、「Apache Flink」が優れているんじゃないか?

参考文献

https://qiita.com/takanorig/items/e9880813798f0ac5679d
https://www.ossnews.jp/oss_info/Apache_Flink
https://x1.inkenkun.com/archives/5406

関連記事

Apache Flink ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/05/235755
Apache Flink ~ 環境構築 / Docker compose編 ~
https://dk521123.hatenablog.com/entry/2023/07/28/220039
Apache Flink ~ 環境構築編 / Kubernetes
https://dk521123.hatenablog.com/entry/2023/05/09/235256
Apache Flink ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/29/000000
Apache Flink ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/07/23/161621
Apache Flink ~ 引数の扱い / ParameterTool ~
https://dk521123.hatenablog.com/entry/2023/08/01/004207
Apache Flink ~ Streaming vs Batch ~
https://dk521123.hatenablog.com/entry/2023/07/02/142843
Apache Flink ~ DataStream API
https://dk521123.hatenablog.com/entry/2023/10/03/212007
Apache Flink ~ Table API & SQL
https://dk521123.hatenablog.com/entry/2023/10/04/001517
Apache Flink ~ RichParallelSourceFunction ~
https://dk521123.hatenablog.com/entry/2023/09/15/000000
Apache Flink ~ Flink to PostgreSQL
https://dk521123.hatenablog.com/entry/2023/08/12/133352
Apache Kafka ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/04/26/103421
Scala ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/10/193805
Scala ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/12/184331