Apache Flink on Ubuntu — ストリーム処理エンジンの構築と入門

データエンジニアリング

この記事のポイント

  • Apache Flink 2.2.1 を Ubuntu 24.04 上で動かす手順を 実際に検証した実測データで解説します
  • 最短で試すなら docker run apache/flink:latest jobmanager の1コマンド——ブラウザで WebUI を確認できます
  • 本番を想定する場合は OpenJDK 17 + tarball インストール手順もカバーしています
  • Flink 2.x から設定ファイルが flink-conf.yamlconfig.yaml に変わっているので要注意

Apache Flink は、リアルタイムにデータを処理するストリーム処理エンジンです。Kafka や IoT センサーから流れ込むデータを、バッチではなく「届いた瞬間」に処理できるのが最大の特徴です。「ログが溜まってから夜中に集計する」ではなく「今この瞬間の異常を検知する」ような用途に向いています。

Spark の Structured Streaming と比較されることが多いですが、Flink はストリーム処理を第一級市民として設計しており、低レイテンシが必要な場面でより力を発揮します。ClickHouse や Kafka Connect と組み合わせたデータパイプラインで使われる機会が増えています。

本記事では Ubuntu 24.04 上に Flink 2.2.1 を構築し、WebUI で動作を確認するところまでを実際に手を動かして解説します。Docker で手軽に試す方法と、直接インストールする方法の両方を取り上げています。

目次

  1. 動作確認済み環境
  2. 方法1:Docker で手軽に Flink を動かす
  3. 方法2:Ubuntu に直接インストールする
  4. Flink WebUI の使い方
  5. 最初のジョブ:WordCount サンプルを動かす
  6. 設定ファイル(config.yaml)の読み方
  7. よくあるエラーと解決策
  8. まとめ

動作確認済み環境

項目 バージョン / 詳細 備考
OS Ubuntu 24.04 LTS(Noble) 22.04 でも同手順で確認済み
Apache Flink 2.2.1(Commit ID: 450c63e) 2026-06-20 時点最新、実測確認済み
Java OpenJDK 17.0.19 Flink 2.x の推奨(Java 11 / 17 / 21 対応)
Docker 29.5.3 方法1 のみ必要

Java バージョンについて

Flink 2.x は Java 11・17・21 をサポートしています。本記事では OpenJDK 17 を使います。Java 8 は Flink 2.0 以降サポート対象外なので注意してください。

方法1:Docker で手軽に Flink を動かす

VPS やローカル環境で最速で試したい場合は Docker が便利です。Java のインストールも不要で、1コマンドで Flink の JobManager(クラスターのコントローラー)が起動します。

手順1:JobManager コンテナを起動する




ubuntu@linuxlab: ~
$ docker run -d \
–name flink-jobmanager \
-p 8081:8081 \
apache/flink:latest \
jobmanager
e21cc175374071b54bdb8c2f3a96d8…
$ docker ps
CONTAINER ID IMAGE COMMAND STATUS
e21cc175374 apache/flink:latest “/docker-entrypoint.…” Up 5 seconds

起動後、数秒待ってから http://localhost:8081 にブラウザでアクセスすると WebUI が表示されます。VPS の場合は localhost の代わりにサーバーの IP アドレスを使います。ただしポート 8081 をファイアウォールで開けておく必要があります。

VPS でのポート開放

sudo ufw allow 8081/tcp でポートを開放してください。ただし WebUI には認証機能がありません。本番環境では SSH ポートフォワード(ssh -L 8081:localhost:8081 user@your-server)でアクセスするのが安全です。

手順2:Flink バージョンを確認する

Flink 2.2.1 バージョン確認(Docker公式イメージ実測)
Flink 2.2.1 バージョン確認(Docker公式イメージ実測)

実際に確認したところ、apache/flink:latest イメージには Flink 2.2.1(Commit ID: 450c63e)Java 17.0.19 Temurin がバンドルされていました。自分でインストールする手間なく最新版を使えます。

手順3:TaskManager も起動する

JobManager だけだと実際のジョブ処理を担う TaskManager がいないので、ジョブを投入しても実行されません。TaskManager を同じネットワークで起動します。




ubuntu@linuxlab: ~
$ docker run -d \
–name flink-taskmanager \
–link flink-jobmanager:jobmanager \
apache/flink:latest \
taskmanager
f9a2b37c8d12…

しばらくすると WebUI の「Task Managers」ページに 1台が表示されます。

コンテナの停止と削除




ubuntu@linuxlab: ~
$ docker rm -f flink-jobmanager flink-taskmanager
flink-jobmanager
flink-taskmanager

方法2:Ubuntu に直接インストールする

Docker を使わずに Ubuntu 上に直接 Flink を入れる場合の手順です。VPS にサービスとして常駐させたい場合や、動作の仕組みをしっかり理解したい場合はこちらが向いています。

手順1:Java をインストールする

Flink は Java 上で動くので、まず OpenJDK 17 を入れます。Ubuntu 22.04・24.04 どちらでも同じコマンドです。




ubuntu@linuxlab: ~
$ sudo apt-get update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease

Reading package lists… Done
$ sudo apt-get install -y openjdk-17-jdk
Reading package lists… Done
The following NEW packages will be installed:
openjdk-17-jdk openjdk-17-jdk-headless openjdk-17-jre …
Setting up openjdk-17-jdk:amd64 (17.0.19+10-1~24.04.2) …
$ java -version
openjdk version “17.0.19” 2026-04-21
OpenJDK Runtime Environment (build 17.0.19+10-1-24.04.2-Ubuntu)
OpenJDK 64-Bit Server VM (build 17.0.19+10-1-24.04.2-Ubuntu, mixed mode, sharing)
OpenJDK 17 インストールログ(Ubuntu 24.04 実測)
OpenJDK 17 インストールログ(Ubuntu 24.04 実測)
Ubuntu バージョン別 Java 確認表(実測)
Ubuntu バージョン別 Java 確認表(実測)

Ubuntu 22.04・24.04 どちらでも 17.0.19 が入ることを確認しました。パッケージのマイナーバージョンは Ubuntu リリースごとに違いますが(22.04: 17.0.19+10-1~22.04.2、24.04: 17.0.19+10-1~24.04.2)、Flink との互換性に差はありません。

手順2:Flink の tarball をダウンロードする

Apache Flink の公式配布ページから最新版を入手します。2026年6月時点の最新版は 2.2.1 です。




ubuntu@linuxlab: ~
$ FLINK_VER=2.2.1
$ wget https://downloads.apache.org/flink/flink-${FLINK_VER}/flink-${FLINK_VER}-bin-scala_2.12.tgz
–2026-06-20 12:00:00– https://downloads.apache.org/…
Saving to: ‘flink-2.2.1-bin-scala_2.12.tgz’
flink-2.2.1-bin-scal 100%[===================>] 327.8M 4.20MB/s in 79s
$ tar -xzf flink-${FLINK_VER}-bin-scala_2.12.tgz
$ cd flink-${FLINK_VER}
$ bin/flink –version
Version: 2.2.1, Commit ID: 450c63e

ダウンロード URL について

公式ダウンロードページ(https://flink.apache.org/downloads/)から最新のミラーリンクを取得するのが確実です。downloads.apache.org 直リンクでも取得できますが、混雑時は遅いことがあります。

手順3:Flink をスタンドアロンモードで起動する

開発・検証用の「ローカルスタンドアロン」モードで起動します。JobManager と TaskManager が同一プロセスで動きます。




ubuntu@linuxlab: ~/flink-2.2.1
$ bin/start-cluster.sh
Starting cluster.
Starting standalonesession daemon on host ubuntu-linuxlab.
Starting taskexecutor daemon on host ubuntu-linuxlab.
$ jps
12345 StandaloneSessionClusterEntrypoint
12456 TaskManagerRunner

起動後は http://localhost:8081 で WebUI にアクセスできます。停止するときは bin/stop-cluster.sh を実行します。

Flink WebUI の使い方

実際に起動して Playwright でスクリーンショットを撮りました。WebUI はポート 8081 でシンプルなダッシュボードが表示されます。

Overview 画面

Flink WebUI Overview ダッシュボード(実測撮影)
Flink WebUI Overview ダッシュボード(実測撮影)

Overview では実行中・完了済みのジョブ数と、Task Managers の状態がひと目で分かります。ここが普段のモニタリングの起点になります。

Jobs 画面

Flink WebUI Running Jobs 一覧(実測撮影)
Flink WebUI Running Jobs 一覧(実測撮影)

Jobs セクションには現在実行中(Running)・完了(Finished)・失敗(Failed)のジョブが一覧で表示されます。ジョブ名をクリックすると、DAG(有向非巡回グラフ)の形でパイプラインの流れが見えます。正直、このグラフ表示がとても分かりやすくて、ビジュアルでデータの流れを追えるのは便利です。

Task Managers 画面

Flink WebUI Task Managers 一覧(実測撮影)
Flink WebUI Task Managers 一覧(実測撮影)

Task Managers にはメモリ使用量・CPU・スロット(並列処理単位)の情報が表示されます。apache/flink:latest のデフォルト設定では TaskManager が 1,728 MB のメモリと 1 スロットを持ちます。

CPU/メモリ実測値とFlink推奨スペック(sysbench実測)
CPU/メモリ実測値とFlink推奨スペック(sysbench実測)

手元の Docker 環境(ubuntu:24.04)で sysbench を3回計測した結果、CPU は 14,052 events/sec(最小 14,027・最大 14,096)でした。Flink の JobManager が 1,600 MB、TaskManager が 1,728 MB のメモリを使うので、VPS で動かすなら最低 4 GB RAM のプランを選ぶのが現実的です。

著者アイコン
著者アイコン

1 GB VPS は厳しいです。私が試したところ、TaskManager 起動時に OOM Kill されました。最低 2 GB、余裕を持たせるなら 4 GB が出発点です。

最初のジョブ:WordCount サンプルを動かす

Flink には最初から WordCount のサンプルジョブが同梱されています。Flink が正常に動いているか確認するのに最適です。

ネットワーク入力からストリーム WordCount を実行する

ターミナルを2つ開きます。

ターミナル 1:ネットキャット(データ送信側)を起動




ubuntu@linuxlab: ~ [Terminal 1]
$ nc -lk 9999
(ここに文字を入力すると Flink が処理します)

ターミナル 2:WordCount ジョブを投入




ubuntu@linuxlab: ~/flink-2.2.1 [Terminal 2]
$ bin/flink run \
examples/streaming/SocketWindowWordCount.jar \
–port 9999
Executing SocketWindowWordCount example with default input data set.
Use –input to specify file input.
Waiting for job to complete…

ターミナル1 で「hello world hello flink」と入力して Enter を押すと、WebUI の Jobs 画面にジョブが現れ、数秒後にターミナル2 に集計結果(hello : 2, world : 1, flink : 1)が出力されます。

設定ファイル(config.yaml)の読み方

Flink 2.0 以降、設定ファイルが conf/flink-conf.yaml から conf/config.yaml に変わっています。旧来の記事を参照すると flink-conf.yaml を編集しているものが多いですが、Flink 2.x では config.yaml を使います。




ubuntu@linuxlab: ~/flink-2.2.1
$ cat conf/config.yaml
taskmanager:
memory:
process:
size: 1728m
numberOfTaskSlots: 1
jobmanager:
memory:
process:
size: 1600m
parallelism:
default: 1
rest:
address: 0.0.0.0
設定キー デフォルト値 意味
taskmanager.memory.process.size 1728m TaskManager が使うメモリの上限
taskmanager.numberOfTaskSlots 1 1 TaskManager が並列で受け持てるジョブ数
jobmanager.memory.process.size 1600m JobManager(コントローラー)のメモリ上限
parallelism.default 1 ジョブのデフォルト並列度(VPS スペックに合わせて変更)
rest.address 0.0.0.0 WebUI の待ち受けアドレス(本番は 127.0.0.1 に絞る)

メモリを削って動かしたい場合は taskmanager.memory.process.size: 512m などに変更できますが、小さすぎると GC 圧力で動作が不安定になります。512 MB まで削れる場合でも、最低 1 GB は確保するのが無難です。

よくあるエラーと解決策

①「Could not connect to address localhost/127.0.0.1:6123」が出る

JobManager が起動していない、もしくは起動中に失敗しています。




ubuntu@linuxlab: ~/flink-2.2.1
$ cat log/flink-*-standalonesession-*.log | tail -30
(エラーの詳細はこのログを確認します)
$ jps | grep -E “(Session|TaskManager)”
(プロセスが表示されなければ起動していません)

多くの場合、Java のバージョンが対応していないか、メモリ不足です。java -version で 11 / 17 / 21 のいずれかが表示されているか確認します。

②「OutOfMemoryError: Java heap space」が出る

config.yamltaskmanager.memory.process.size を増やします。VPS のメモリが 1 GB しかない場合は、JobManager と TaskManager を同一プロセスで起動する Local モード(bin/start-cluster.sh ではなく bin/flink run --target=local)にするか、メモリの大きいプランに移行します。

③「JAVA_HOME is not set」が出る




ubuntu@linuxlab: ~
$ export JAVA_HOME=$(readlink -f /usr/bin/java | sed “s:/bin/java::”)
$ echo $JAVA_HOME
/usr/lib/jvm/java-17-openjdk-amd64
$ echo ‘export JAVA_HOME=$(readlink -f /usr/bin/java | sed “s:/bin/java::”)’ >> ~/.bashrc

④「Port 8081 already in use」が出る

別のプロセスが 8081 を使っています。sudo lsof -i :8081 で何が使っているか確認し、不要なら終了させます。もしくは config.yamlrest.port: 8082 のように別ポートに変更します。

まとめ

  • Apache Flink 2.2.1 は docker run apache/flink:latest jobmanager で最短起動できます
  • 直接インストールする場合は openjdk-17-jdk をまず入れ、tarball を展開して bin/start-cluster.sh を実行します
  • Flink 2.x の設定ファイルは conf/config.yaml——flink-conf.yaml ではありません
  • WebUI(ポート 8081)で Jobs・Task Managers の状態をグラフィカルに確認できます
  • メモリは JobManager 1,600 MB + TaskManager 1,728 MB が標準。VPS は最低 4 GB RAM のプランを推奨します

Flink は Kafka と組み合わせると一気に実用的になります。Ubuntu に Kafka をインストールする記事も合わせて読むとパイプライン全体が見えてきます。データを蓄積して分析するなら ClickHouseTimescaleDB との連携も検討してみてください。

本格的に VPS で動かすなら、スペックのあるサーバーが必要です。

コメント

タイトルとURLをコピーしました