Apache Flinkの分散ストリーム処理基盤

ステート管理の設計特性

インメモリ状態管理: 高速アクセスが可能だが障害耐性に課題

分散システム状態管理: 耐障害性が高いがレイテンシ増加のトレードオフ

コアアーキテクチャ特性

高スループット・低レイテンシ処理

毎秒数百万イベント処理をミリ秒級レイテンシで実現

時間概念モデル

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

タグ: Apache_Flink ストリーム処理 分散システム 状態管理 イベント時間

6月5日 21:08 投稿