ステート管理の設計特性
インメモリ状態管理: 高速アクセスが可能だが障害耐性に課題
分散システム状態管理: 耐障害性が高いがレイテンシ増加のトレードオフ
コアアーキテクチャ特性
高スループット・低レイテンシ処理
毎秒数百万イベント処理をミリ秒級レイテンシで実現
時間概念モデル
Flinkは二つの時間セマンティクスを提供:
- 処理時間(Processing Time): データがオペレーターに到達した時刻
- イベント時間(Event Time): データ生成元で発生した実際の時刻
イベント時間モデルでは到着順序が乱れたストリームでも正確な計算を保証
ストレージシステム統合
Kafka, Hive, JDBC, HDFS, Redisなど主要ストレージと連携可能
高可用性設計
Kubernetes/YARN/Mesos連携により99.9%以上の稼働率を実現
ストリーム処理フレームワーク比較
| 特性 | Flink | Spark Streaming |
|---|---|---|
| 処理モデル | ストリーム処理 | マイクロバッチ |
| 時間セマンティクス | 処理時間/イベント時間 | 処理時間 |
| ウィンドウ操作 | 柔軟な設定 | 制限あり |
| ステート管理 | 組み込みサポート | 未対応 |
| SQLインターフェース | 提供 | 未対応 |
API階層構造
| 最上位層 | SQLインターフェース |
| 宣言型DSL | Table API |
| コアAPI層 | DataStream API(バージョン1.12以降でバッチ/ストリーム統合) |
| 低レベルAPI | ステートフルストリーム処理 |
ステートフルストリーム処理
ProcessFunctionによる低レベルAPIで複雑なイベント処理を実装
DataStream API
変換(transformation)、結合(join)、集計(aggregation)、ウィンドウ操作を提供
Table API
リレーショナルモデルに基づく宣言型プログラミングインターフェース
SQL統合
Table APIで定義したデータセットに対してSQLクエリを直接実行可能
クラスタデプロイメント
コンポーネントアーキテクチャ
- クライアント: ジョブの変換と送信
- JobManager: タスクスケジューリング
- TaskManager: データ処理実行
デプロイメントパターン
セッションモード(Session Mode)
共有クラスタで複数ジョブを実行、リソース競合が発生する可能性
ジョブ分離モード(Per-Job Mode)
ジョブ毎に専用クラスタを起動、リソース分離を実現
アプリケーションモード(Application Mode)
クライアント負荷を軽減しJobManagerで直接アプリケーション実行
YARN統合設定
# 環境変数設定例
export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
export HADOOP_CLASSPATH=$(hadoop classpath)
# YARNセッション起動
bin/yarn-session.sh \
-nm flink-cluster \
-jm 4096 \
-tm 8192 \
-qu production
高可用性構成
# flink-conf.yaml 設定例
high-availability: zookeeper
high-availability.storageDir: hdfs:///flink/recovery
high-availability.zookeeper.quorum: zk1:2181,zk2:2181,zk3:2181
jobmanager.execution.failover-strategy: region