Ideal Auto の K8s 上の Flink に基づくデータ統合の実践

Ideal Auto の K8s 上の Flink に基づくデータ統合の実践

1. データ統合の発展と現状

Ideal Auto のデータ統合の開発は、次の 4 つの段階を経てきました。

フェーズ 1: 2020 年 7 月に、DataX に基づいてオフライン データ交換機能が構築されました。

フェーズ2:2021年7月にFlinkをベースとしたリアルタイム処理プラットフォームが構築されました。これら 2 つのフェーズでは、実際のデータ統合製品は存在しませんでした。

フェーズ3:2022年9月にデータ統合プラットフォームの構築を開始し、最初のデータ統合リンクを構築し、KafkaからHiveへのデータリンクを実現しました。

フェーズ4:2023年4月に、従来のリアルタイム処理機能をベースにオフライン統合機能を拡張し、バッチデータとストリームデータの統合を実現しました。

初期の頃、Ideal には統一されたデータ統合プラットフォームがなく、データ製品は多岐にわたりました。

TiDB、MySQL、StarRocks、MongoDB などから下流へのデータ転送は DataX を介して実現されます。 Kafka、Oracle などからのストリーミング特性を持つデータ転送は Flink を通じて実現されます。同時に、Hive などの一部のデータ転送は Spark SQL を記述することで実現されます。 TiDB や Oracle などの一部のデータベースでは、データベース独自のエンジンを介してデータを送信します。

上記のデータフォームに基づくと、ビジネス側では製品の使用時に次のような問題点があります。

  • 製品機能の不足。複数のプラットフォームを切り替える必要があり、直接実装できる製品がなく、開発チームがコードを記述する必要があります。
  • 複数の開発言語。 Flink、Spark、DataXなど、各エンジンには独自の構成があり、複数の開発言語セットと異なる開発の詳細を同時に理解する必要があります。
  • リソースの共有は困難です。バッチ処理とストリーム処理は異なるエンジンを使用し、異なるチームによって開発されるため、基盤となるコンピューティング リソースとストレージ リソースを共有することは困難です。
  • リソースの使用率が低い。リソースの共有が難しいからこそ、リソースの利用率の低下と不均衡という別の問題が発生します。たとえば、リアルタイム コンピューティング クラスターは長時間実行されるタスクであり、コンピューティング リソースが不足することがよくありますが、ストレージ リソースは基本的に使用されません。

ビジネスの問題点に基づいて、3 つの主要なニーズをまとめました。

1 つ目は、さまざまな異種データ ソース間の異なる伝送エンジン間の違いを隠す統合プラットフォームです。

2 つ目は、コンピューティング エンジンを統合し、1 セットのエンジンでバッチとストリーミングを実装することです。

3 つ目は、ストレージとコンピューティングの分離です。これにより、ビジネス ニーズに応じて、コンピューティング層とストレージ層で独立した柔軟なスケーリングが可能になります。

上記の要件を満たすために、コンピューティング エンジンとして Fink を使用することを選択しました。バッチ ストリーム統合コンピューティング エンジンにより、バッチ処理とストリーミング処理をシームレスに切り替えることができます。同時に、K8s に基づく Flink のクラウド ネイティブ機能は、コンピューティング リソースとストレージ リソースの柔軟なスケーリングの実現にも役立ちます。

当社の製品は多くのビジネスアプリケーションで使用されています。 Oracle、MySQL、TiDBなどのサーバー側ログデータに接続し、binlogで業務データを下流に送信します。同時に、車両、クラウド、工場内のいくつかの埋設ポイントや信号に関するデータも統合プラットフォームを通じて送信されます。

コンピューティングの面では、伝送機能の面では、ストリーミングとバッチデータ処理の変換を実現し、並列読み取りと並列書き込み機能をサポートし、異種データソースからの異なるタイプのデータを変換する機能を備えています。ビジネス ユーザーは、さまざまな製品の詳細を理解する必要がなくなりました。製品の運用・保守機能としては、タスク管理、権限制御、監視・アラーム、ログ収集など、タスクのライフサイクル全体をカバーします。最終的には、さまざまな下流のデータ ストレージに落ちます。

2. データ統合の実装

1. データ統合プラットフォームのアーキテクチャ

ストレージ層: JuiceFS+BOS が使用され、K8s ノードの一部のローカル ストレージ機能を使用して、コンピューティング エンジンに対応するストレージ機能が提供されます。

コンピューティング層: Flink カーネルに基づいて、さまざまなコネクタが拡張され、最終的に標準化されたイメージにカプセル化されます。イメージは Flink Operator を通じて呼び出され、タスクを K8s クラスターに送信します。同時に、Flink の履歴サービスも搭載されており、例外発生時やタスク終了時のタスクの履歴ステータスを分析できます。 Flink Operator は Flink 上で定義された CRD であり、Kubernetes API サーバーを通じて外部に標準化された API を提供します。中間層は上部にカプセル化されており、K8s API サーバーを使用して製品の標準化された API をカプセル化し、各層の依存関係を保護します。また、タスクのオーケストレーションとタスクのライフサイクル管理も行います。

2. 設計モデル

データ統合の設計モデルを下図に示します。データ転送の変換は、さまざまなソース プラグインとシンク プラグインを定義することによって実現されます。

以下にカプセル化された API の場合、ユーザーは、変換プロセスを完了するために、送信するソースとデータ コンテンツ、および書き込むシンクを定義するだけで済みます。

たとえば、TiDB、OceanBase、Hive、Kafka などのシンクへのリンクがすでにあるとします。新しい MySQL コネクタが追加されると、このプラグイン セットのデータ転送機能のセットが作成されます。このようにして、さまざまなシナリオにデータを迅速に実装できます。

3. 典型的なシナリオ

オフライン統合シナリオでは、まずライブラリ テーブル間の関連関係を取得します。増分および完全なデータ同期は、統合されたスケジューリング プラットフォームを通じて実行されます。

これまで、OceanBase から Hive へのリンクを使用する場合、OB 自体にタイムアウト設定があるため、データ量が多いと OB がタイムアウトになることがよくありました。私たちの解決策は、まず OB のデータ構造を取得し、主キーとパーティション選択シャーディング フィールドを分析し、このフィールドの最大値と最小値、およびこのバッチ内のデータ量を計算し、これら 3 つの情報を使用して、このデータを取得するサイズを合理的に設定することです。その後、Flink はサイズに基づいて並列にプルできます。毎回取得するデータの量が大きすぎないことを確認し、データタイムアウトの問題を解決します。

これまで、リアルタイム伝送リンクを開発するには、ユーザーは複数のプラットフォームにまたがって作業する必要があり、長い開発プロセスが必要でした。さらに、ユーザーはテーブルを手動で作成する必要があり、開発が複雑になります。

データ統合プラットフォームを使用すると、上記の一連の手動プロセスが不要になります。統合プラットフォーム上でソースとシンクを構成することで、データフローを実現できます。

Hive テーブルの場合、多くの場合、データ パーティションが存在します。 Hive パーティションを生成する方法はいくつかあり、データ、処理、またはメタデータの時間に基づいてパーティション分割できます。メタデータ時間パーティショニングの利点は、遅延なくデータを消費する場合、パーティションのデータは基本的に同じ Hive パーティションに書き込まれるため、小さな Hive ファイルが大量に生成されるのを回避できることです。同時に、Kafka の自動パーティション認識機能が有効になります。たとえば、Kafka データが劇的に増加すると、Kafka トピックのパーティションが増加し、自動認識が非常に必要になります。

上の図は、Oracle 入力ストリームのシナリオを示しています。 Flink CDC 機能の助けを借りて、フル データ ステージでは、フル データを読み取るために複数の並列度が設定されます。データ全体が読み取られると、Flink は自動切り替え機能によって増分モードに切り替わります。増分モードでは、増分データを読み込むタスク マネージャーの 1 つが選択されます。

4. 異種データソース

データベースの種類によってサポートされるデータ型が異なり、このプロセス中にどの型をどの型に変換するかを覚えておくのは困難です。したがって、データ統合プラットフォームでは、データ ソース タイプを Flink タイプにマップし、データ ターゲット タイプも Flink タイプにマップします。最終的には、すべてが Flink 型を通じて均一に処理および変換されます。ユーザーはマッピングプロセスに注意を払う必要はありません。

5. SQLフィルタ条件

この変換プロセス中に、いくつかの一般的な where 条件をフィルタリングする必要があります。よく使われる関数をいくつか紹介します。

3. データ統合クラウドネイティブの実装

K8s クラウドネイティブ ソリューションの実装では、主に 4 つの重要なポイントが考慮されます。以下で、それらを 1 つずつ紹介します。

1. ソリューションの選択

選択に関しては、タスク管理に Flink Operator を使用することを選択します。まず、Flink Operator はクラスターを簡単に管理できます。 K8s アプリケーションをカプセル化し、API を拡張してアプリケーション インスタンスを構成および作成できます。宣言的にコミットします。また、統合イングレスも搭載されており、Flink の Web UI を設定したり、操作中に Web UI を通じてタスクのステータスを監視したり、操作ログを表示したりすることができます。 Flink Operator は、アプリケーションの実行と一時停止、ステートフルおよびステートレス アプリケーションのアップグレード、チェックポイントの時間指定トリガーと管理など、ジョブのライフ サイクル全体の管理を実装します。ロールバックも可能です。

上図はFlink Operatorの処理プロセスを示しています。まず、プラットフォームに Flink Operator を登録します。つまり、K8s クラスターに Flink デプロイメント用の CRD を作成します。この CRD を使用して、対応するリソースを作成できます。 yaml ファイルが K8s クラスターに送信されると、K8s API は CRD を呼び出して FlinkDeployment を作成します。次に、Flink Operator は Flink Deployment と対応する TaskManager を作成します。同時に、Operator は FlinkDeployment のステータスを監視します。FlinkDeployment は実際には JobManagerPod のステータスを監視し、Operator 内で更新します。タスクが失敗した場合は、タスクの再開が試行されます。

2. 状態判定とログ収集

さまざまなタスクのステータスが FlinkDeployment に記録されています。 Flink K8s API サーバーをウォッチ方式で監視することで、各タスク イベントのステータスをキャプチャできます。同時に、各 JobManager および TaskManager ポッドも監視し、ポッドのステータスと名前をログのタイトルとして使用します。タスクの実行ステータスがすでにあるのに、なぜポッドのステータスを収集する必要があるのですか?リアルタイム タスクは永続的なタスクであるため、何らかの理由により、特定の時点でポッドが終了する可能性があります。デッドポッドの場合、すべてのログのステータスを確認する必要はありません。ポッドのステータスをマークすることで、ログが有効か無効かを説明することができます。各 K8s ノードにエージェントがデプロイされ、エージェントは各ポッドのログをダウンストリーム変換ログとして収集します。

上図は状態遷移関係を表しています。失敗、完了、キャンセル、一時停止の 4 つの状態は、最終的なタスク完了の状態タイプです。障害が発生した場合、ダウンストリームは対応するアラームを発行します。

3. 監視と警報

各タスクのアラームを設定する方法をユーザーに提供します。ユーザーがタスクを開始すると、タスクは対応するインジケーターを Prometheus に報告します。 Prometheus は定期的にそれらを収集して計算します。アラームインジケーターが作動しない場合は、サイレント状態になります。アラームインジケーターがトリガーされると、対応するユーザーにアラームが送信されます。ユーザーはアラームに基づいて適切なアクションを実行できます。

4. 共有ストレージ

JuiceFS は共有ストレージに使用されます。各ポッドは、ローカル CSI をマウントしてローカル ストレージ ディレクトリを形成し、JuiceFS をローカルにマウントします。

Flink タスクは定期的なチェックポイントを実行する必要があり、これは JuiceFS に保持されます。タスクの実行中、Flink は再起動戦略を構成します。オペレーターにはいくつかの再起動戦略もあります。タスクが異常な場合、タスクは再起動されます。再起動すると、再起動のための最新のチェックポイントが見つかります。さらに、Flink Operator はタスクのステートレスおよびステートフル アップグレードを実装できます。アップグレード中に YAML ステータスが変更されると、最新のチェックポイントが見つかり、タスクが再開されます。

Flink 操作中のステータス情報とアーカイブ情報も JuiceFS に記録され、Flink の履歴を通じて表示できるようになります。

IV.将来計画

まず、より多くのデータ ソースをサポートし、より異種のデータ ソース間の変換を可能にします。

2 番目に、弾性スケーリング機能に関しては、現在 K8s の機能が使用されているものの、リソースの弾性スケーリングなどの問題はまだ完全には実装されていません。将来的には、弾性スケーリング機能をさらに強化したいと考えています。

3つ目は、大量データの伝送性能をさらに向上させることです。

最後に、バッチ処理タスクの場合、Flink には現在、述語のプッシュダウンを妨げる欠陥があります。その結果、where 条件を使用してタスクを実行すると、データの全量が Flink メモリに取り込まれ、where 条件に従ってフィルタリングされます。

<<:  Kubernetes のよくある落とし穴と課題 10 選

>>:  コンテナの「エッジ」

推薦する

gRPC と REST を使用したマイクロサービス アーキテクチャの統合の課題

この記事では、マイクロサービスの実装における現在の明らかな問題をまとめ、主に以下の解決策を提案します...

Webmaster.com からの日報: 個人ネットワーク情報は保護され、Youyi.com は放棄される

1. 電子商取引ショッピングガイドサイトの参入戦争:ブロックされ疎外されるリスクがあるショッピングガ...

Android マーケット - OPPO アプリケーション マーケット ASO 詳細説明

本日お話ししたいのは、OPPO App Market が店頭に並ぶ前から店頭に並んだ後までの運用プロ...

QingCloud Technology iFCloud によるエンタープライズレベルのクラウド データセンター管理プラットフォームの構築方法

[51CTO.com からのオリジナル記事] 完全なクラウド コンピューティング時代の到来により、ク...

#BlackFriday# hostdare: ブラックフライデー大セール、CN2 GIA シリーズが 20% オフ、CN2 GT シリーズが 25% オフ

Hostdare は誰もが知っている VPS 販売業者です。ブラックフライデーのプロモーション期間中...

アマゾン中国が2015年の書籍ランキングを発表

12月10日、アマゾン中国は北京で2015年の年間書籍ランキングを発表した。これには「年間書籍売上ラ...

あなたのウェブサイトが何に関するものであるかを忘れないでください。

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスインターネット技術の発展...

ハイブリッドな未来の働き方、ニューノーマルにおける競争力

1年以上前、世界的な感染症の流行とそれに伴う社会運営やビジネスモデルの急激な変化に直面し、マイクロソ...

BAT の広告に手を出したのは誰ですか?

5月にはBATが相次いで2019年第1四半期の財務報告を発表し、テンセントと百度のオンライン広告収入...

注目すべきエッジコンピューティングベンダートップ10

モノのインターネット (IoT) とセンサー技術の進歩により、データが収集された場所またはその近くで...

中小企業はマーケティングスキルをどのように習得すべきでしょうか?

現在、多くの中小企業や新興企業が大企業のマーケティング手法を真似しています。大企業がそうしているのを...

電子商取引に適しているか?WeChatモーメンツにおける電子商取引の10の罪

みなさんこんにちは、小思です。モーメントについては、WeChatパブリックプラットフォームで電子商取...

新規受注サイトの SEO プロジェクト分析

2日前に仕事を辞めました。帰宅後は、自分のウェブサイトを運営しながら、2つの新しいウェブサイトの注文...

統計チャートを使用して業務を支援する方法を教えます

データは、開発者が製品やユーザーをより深く理解するのに役立つ最も直感的な方法です。また、アプリの動作...

Microsoft Windows に関する 8 つの驚くべき事実

今月、Windows は 30 周年を迎えます。 この長い期間に、何億人もの人々が Windows ...