データ・ストリーミング・パイプラインの最適化：パネルのまとめ

<font color="Grey">*[Optimizing data streaming pipelines: a panel recap](https://aiven.io/blog/optimizing-data-streaming-pipelines)の翻訳です。*</font>

2021年11月3日

# データ・ストリーミング・パイプラインの最適化：パネル・リポート

Apache FlinkとApache Kafkaはフーとバーのように相性が良い。パネリストのOlena Babenko氏、Francesco Tisiot氏、Gyula Fora氏の説明を読むか聞くかしよう。

Aivenは、[Apache Flink](https://flink.apache.org/)とストリーム処理に関するあらゆるカンファレンスである[Flink Forward Global 2021](https://www.flink-forward.org/global-2021)でパネルディスカッションを主催しました。初めてこのカンファレンスに参加できたことはとても刺激的で、Flinkコミュニティとの交流をとても楽しむことができました。


私たちのパネリストであるOlena Babenko (Aiven)、Francesco Tisiot (Aiven)、Gyula Fora (Cloudera)は、Flink SQLの好きなところや、Kafkaを使ったデータストリーミングパイプラインにどのようにFlinkが適しているかなどについて話し合いました。聴衆から多くの素晴らしい質問と有益な洞察を得ることができました。


パネルの録画は[Flink Forward YouTubeチャンネル](https://www.youtube.com/channel/UCY8_lgiZLZErZPF47a2hXMA/videos) とこの記事の最後にあります！その間に、私たちの専門家による総括といくつかのヒントをお読みください。


## Apache Kafka がストリーミングデータに最適な理由は？なぜFlinkと相性が良いのか？


Francesco Tisiot氏によると、私たちはバッチ処理からストリーミングへと移行しているため、パフォーマンスとスケーラビリティに優れ、実績のあるプラットフォームが必要です。Apache Kafkaは、Kafka Connectのような美しい機能を備えており、Kafkaインスタンスを他のシステムに接続できるため、このような場合に最適です。しかし、Kafkaはしばしばメッセンジャーとして機能し、ある場所からデータを取得し、それを別の場所にプッシュする。


レベルアップして分析を行いたいのであれば、Flinkは非常に強力なツールだ。FlinkはKafkaのアーキテクチャ（トピックやパーティションなど）を理解し、それらのパラメータにわたってワークロードを最適化する。


第二に、Flinkは入力と出力の両方で、膨大なデータプラットフォームをサポートしている。そのため、データがどこにあるかに関わらず、データパイプラインに適した選択肢となる。FlinkとKafkaの組み合わせは実に強力で、データストリーミングを次のレベルに引き上げてくれます。


## Flink と Kafka の両方を使用する際の共通の課題は何ですか？


KafkaとFlinkのサービスを使っていると、データが歪んでいるという問題によく直面します。例えば、Kafkaサービスに10個のパーティションがあり、1つのパーティションだけが5GBで残りは2MBだとします。通常このようなことが起こるのは、ノードキーの不一致が原因です。リクエストに不一致があると、KafkaとFlinkサービスがデータを処理しようとするときにパフォーマンスが低下する。


Olena Babenko氏によると、最大メッセージ・バイト数やパッチ・サイズなどのメトリクスを調整することで、データ過負荷の影響を最小限に抑えることができる。さらに、Kafkaサービスの管理者であれば、パーティショニング・メカニズムを見直して、メッセージの均等な分散を確保することができる。


## Flink の改善点は？


パネリストはこのトピックについて様々な意見を述べました。Flinkのエキスパートであり、長期コミッターでもあるGyula Fóra氏は、Flinkはリリースのたびに大きく改善されてきたと述べました。多くの新機能が追加され、素晴らしいコネクターやクラウドサポートがある今が、Flinkに参加する絶好のタイミングであることは間違いない。驚くほどのペースで新機能の追加に励むFlinkコミュニティに賞賛を送りたい！


しかし、SQLの面では改善すべき点もあります。例えば、SQLクエリの優れた運用サポートや、SQLジョブ間のセーブポイントの互換性を保証する方法などが便利でしょう。さらに、[Francescoのケース](https://twitter.com/FTisiot/status/1451538229036003340)のように、SQL文のエラー箇所を正確にユーザーに伝えることで、特に新しいFlinkユーザーにとって、より良いエクスペリエンスになるでしょう。


SQLクライアントは、かなり改善されましたが、まだ未完成です。特にSQL CLIに注目すると、実際のアプリケーションを実行する際に、ロギングやその他すべての操作が正しく設定され、本番用にセットアップされていることを確認したい。ほとんどの企業では、これを中心にしたデプロイメント・スタックがあり、SQL CLIよりも通常のテーブルAPIプログラムの方が適している。


SQLアプリケーションに関するもう1つの小さな問題は、単体テストを書くのが難しいということだ。Olena氏は、インメモリテストを実行するために、できるだけ多くのデータソース（例えばデータフェイカー）をモックすることを一つのヒントとして提案している。最悪の場合、ファイルシステムやDocker化されたツールをソースとして使ってみることもできる。


## Flinkに代わるものは？


我々のパネリストは、Flinkが主流になりつつあることに同意している。ほとんどの場合、ストリーム処理に必要なものはほとんど揃っている。例えば、Kafkaの豊富な経験を持つ強力なチームがすでにある場合など、社内の開発者の経験によって新しいツールを導入することが現実的でないケースもある。しかし、kSQLのようなプラットフォーム固有のツールを使うことの欠点は、Kafkaをソースとしてもシンクとしても使わざるを得ないことだ。一方、Flinkにはそのような制限はなく、幅広い[コネクタ](https://flink-packages.org/)によって幅広い技術エコシステムで動作します。


## もしあなたがFlinkを初めて使うなら、何を試すのが一番楽しいですか？


間違いなく、[Flink documentation](https://nightlies.apache.org/flink/flink-docs-release-1.14/) をチェックすべきです。Flink の機能を理解するのに役立つ素晴らしいコンテンツがたくさんあります。第二に、Flinkを始めるのに最適な方法としてSQLクライアントを試してみることをお勧めします。第三に、ストリーミングSQLインターフェースをお探しなら、私たちはApache Flinkベータプログラムをまもなく開始します！


## まとめ


Aivenのサービスをまだご利用でない方は<https://console.aiven.io/signup>から無料トライアルにお申し込みください！


また、[changelog](https://aiven.io/changelog)や[blog](https://aiven.io/blog)のRSSフィード、または[LinkedIn](https://www.linkedin.com/company/aiven/)や[Twitter](https://twitter.com/aiven_io)のアカウントをフォローし、製品や機能関連の最新情報をご確認ください。