より良いApache Flink®体験を可能にするAivenの旅

<font color="Grey">*[Aiven's journey to enable a better Apache Flink® experience](https://aiven.io/blog/aiven-flink-journey)の翻訳です。*</font>

2023年3月2日

# より良いApache Flink®体験を可能にするAivenの旅

SQL、統合、オートコンプリート、データプレビューなど、AivenはあなたのApache Flink®ワークフローに良いものをもたらします。

すべての企業の中心には、データと変換パイプラインの2つがあります。集計、フィルタリング、マスキング...生の入力を有用なデータ資産に変えるには、非常に多くのことが必要です。  

[Aiven for Apache Flink®](https://aiven.io/flink)は、Apache Kafka®、PostgreSQL®、OpenSearch®のような様々なテクノロジーでホストされたデータ上でストリーミングおよびバッチデータ変換パイプラインを定義するSQLインターフェースを提供することで、このニーズを満たします。


Aiven for Apache Flinkの最初のベータリリース以来、多くのことが起こりました。Apache Flink向けのフルマネージドサービスは現在一般提供されており、Flinkの使われ方や安定性、ライフサイクル管理について多くのことを学びました！


Aivenのデータ・ストリーミング・サービス担当ディレクターである[Filip Yonov氏](https://www.linkedin.com/in/filipyonov/)と対談し、これまでの道のりやAiven for Apache Flinkの次の方向性について話し合いました。


## 起源から今日まで、Aiven for Apache Flinkのストーリー


Aivenはデータパイプラインを提供するだけでなく、データ会社でもあり、社内向けにオープンソースの技術を採用しています。私たちはデータ会社でもあり、オープンソースの技術を社内の目的で採用しています。ツールの経験と信頼が十分に蓄積されたとき、私たちはそれらをパッケージ化し、私たちのクライアントのためにサービスとして公開するオプションを持っています。これはPostgreSQLから始まりました。PostgreSQLは、まず私たちのデータベース・ニーズを解決し、次に最も広く普及しているデータ・ソリューションの1つになりました。このプロセスは、例えばApache Kafkaでも繰り返されています。Apache Kafkaは、ストリーミング・モードでテクノロジーを横断してデータを提供するために使用しています。


データ変換の必要性に直面したとき、私たちはテクノロジー間のパイプライン定義を統一できるツールを探しました。私たちは、Apache Kafkaをほぼリアルタイムで操作し、タイムリーな分析や通知を提供する必要がありました。Apache Flinkは、幅広いバックエンドテクノロジーにまたがってパイプラインを定義できるため、この分野における明確なリーダーとして注目されました。さらに、[SQL機能](https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/functions/systemfunctions/)の包括的なセット、[弾力的でスケーラブルなアーキテクチャ](https://flink.apache.org/flink-architecture.html)、プロジェクトを支えるユニークで協力的なコミュニティにより、Apache Flinkはクリティカルなプロダクションワークロードのための確かな選択肢となっています。


Aiven for Apache Flinkベータ版の最初のリリース以来、私たちは顧客や社内の関係者からの貴重なフィードバックから恩恵を受け、サービスとその開発者体験を改善してきました。以下の段落では、最近の改善点について深く掘り下げます。


## Apache Flink SQL上の抽象化レイヤー


最初のAiven for Apache Flink製品は、Apache Flink SQLクライアントへの直接的なマッピングを提供しました：テーブル（データのソースとシンク）とジョブ（変換パイプライン）を定義することができました。しかし、これはSQLクライアントの旅を反映したものですが、時間の経過とともに構造定義が進化した場合に技術的な誤解を生みます。


実行中のApache Flinkジョブには、デプロイ時に定義されたソース、シンク、変換SQLの両方が含まれています。その後、ソースまたはターゲットのテーブル定義が変更された場合、ジョブは停止して再起動するまで更新を認識しません。このわずかな違いは、Aiven for Apache Flinkの最初のバージョンに保存されたメタデータ定義がクラスタ上で実行されたものと同期していない可能性があることを意味し、ジョブの再起動時に混乱やエラーが発生することさえありました。


私たちは、**アプリケーション**の定義を追加することでこの問題を解決しました。


* ソース・テーブルとシンク・テーブルの定義
* SQL変換定義
* デプロイメント・パラメーター


アプリケーション・レベルで作業することで、どの時点でも現在の定義がどうなっているかを知ることができる。


また、Aivenは**バージョン管理システム**を追加しました。バージョン間のナビゲート、機能強化の追跡、新機能の探索、そして見た目がおかしい場合の変更のロールバックができるようになりました。


## よりスムーズなパイプライン定義


FlinkのSQLを書くのは簡単なことではありません。テーブルや統合、メタデータのパラメータを定義するのは、時に頭痛の種になります。ここでは、Aiven for Apache Flinkがパイプライン定義を強化する方法を紹介します：


* 統合の簡素化**：データソースやシンクとの統合、ネットワーク、SSL証明書の難しさは忘れてください。Aiven Consoleで統合を作成し、数回クリックするだけで、Aiven for Apache Kafka、Aiven for PostgreSQL®、Aiven for OpenSearch®から読み取り、Aiven for OpenSearch®に書き込むことができます。
**Pure table SQL definition**: テーブル定義の以前の反復では、カラム定義（つまり、どのカラムがテーブルに含まれるか）とメタデータ構文（つまり、どのコネクター、トピック、コンシューマーグループを使用するか）を分離しました。しかし、ユーザーからのフィードバックに基づき、これはエクスペリエンスに追加的な利点をもたらさないことに気づきました。そこで、テーブル定義を純粋な SQL に戻し、Apache Flink SQL Client と完全に互換性を持たせました。
* SQLオートコンプリート**：完全なテーブルと変換定義の両方がSQLになっているため、開発者が作業を迅速に進めることができるオートコンプリート機能を追加しました。
* 新しいパイプライン・プレビュー機能により、テーブル定義が正しいデータを取得し、SQL 変換が正しい操作を実行することを、ターゲット環境にレコードを 1 つもプッシュすることなく確認できます。対話型クエリにより、テーブル定義や変換 SQL の出力を Aiven コンソールで直接確認できます。
* 改善された**[OpenSearch](https://github.com/apache/flink-connector-opensearch)と[Slack](https://github.com/aiven/slack-connector-for-apache-flink)コネクタ**：データはPostgreSQLとApache Kafkaだけに存在するわけではありません。接続オプションのセットを強化することで、データパイプラインの結果をOpenSearchインデックスに直接ストリーミングしたり、Slackメッセージングツールで人々に通知したりできるようになりました。


## より迅速な定義、再利用、反復的アプローチ


曖昧さを解消することだけがアプリケーションコンセプトの利点ではありません。テーブルと変換SQLの定義を保存し、バージョン管理を行うことで、Aiven for Apache Flinkは高速な反復、新しいデプロイのテスト、コード変更のリコールに最適なプレイグラウンドとなります。


さらに、一度正しいプロトタイプが作成されると、新しいUIにより、アプリケーション間でテーブル定義を素早くコピーすることができます。これにより、「空のキャンバス症候群」が回避され、新しいアプリケーションの開発に必要な時間が短縮される。


## デプロイメントの厳密な管理


データパイプラインの定義はそれぞれ異なり、実行内容もそれぞれ異なります。Deployment "ステージを追加することで、並列タスクの数などのアプリケーション実行パラメータを定義できるようになりました。また、[Flink savepoints](https://nightlies.apache.org/flink/flink-docs-master/docs/ops/state/savepoints/)を使ってデプロイメントを停止し、その状態を保存することもできます。セーブポイントを再利用して、同じアプリケーションによって生成された既存の状態からアプリケーションの実行を開始することができます。セーブポイントの互換性は自動的に評価されます。一致した場合、そのセーブポイントは既知の時点からアプリケーションを開始するために使用されます。  

アプリケーションごとに最大5つのセーブポイントを保存できるので、ニーズに応じて新しいデプロイの「出発点」を選択することで、Flinkアプリケーションで簡単に「タイムトラベル」することができます。


## ライフサイクル管理


Aiven for Apache Flinkをより堅牢なものにするために、ベータ版のお客様や社内の関係者にご協力いただきました。ネイティブのApache Flinkの[checkpoint](https://nightlies.apache.org/flink/flink-docs-master/docs/ops/state/checkpoints/)と[savepoint](https://nightlies.apache.org/flink/flink-docs-master/docs/ops/state/savepoints/)システムは、パイプラインの状態のバックアップを自動化し、グレースフル・シャットダウンとスタートアップを可能にするために強化されました。これに加えて、ワークロードに応じてサービスのサイズを正しく設定し、必要なときにいつでも変更できるようになりました。さらに、データをクラウドやリージョン間で移行する必要がある場合、パイプライン定義がデータに追従し、待ち時間を最小限に抑えることができます。


## Aiven for Apache Flinkの未来


Aiven for Apache Flinkが提供する開発者体験の向上は、長い旅の第一歩に過ぎません。Aivenは、サービスのさらなる最適化に全力を注いでいます。Flinkがデータ処理分野におけるデファクトスタンダードになりつつあることは明らかです。


Aivenは新しい統合・接続機能を追加し、今後リリースされるすべてのFlink SQL機能を統合することで、サービスの強化を続けていきます。[私たちの計画](https://aiven.io/pricing?product=flink&tab=plan-pricing)は、既存および新規のお客様からの新しいユースケースやニーズに対応するために拡張していきます。


[Aivenコンソール](https://console.aiven.io/)から直接、Aiven for Apache Flinkの新しい開発者体験をご体験ください。