この記事は、NetEase Cloud Music のリアルタイム コンピューティング プラットフォーム開発エンジニアである Yue Meng 氏が共有したものです。 NetEase Cloud MusicにおけるFlink + Kafkaの実践的な応用を主に以下の4つの部分から紹介します。 背景
1. 背景1. ストリーミングプラットフォームの一般的なフレームワーク 現在のストリーミング プラットフォームの一般的なアーキテクチャには、通常、メッセージ キュー、コンピューティング エンジン、ストレージの 3 つの部分が含まれます。一般的なアーキテクチャを下図に示します。クライアントまたは Web ログはメッセージ キューに収集されます。コンピューティング エンジンはメッセージ キュー内のデータをリアルタイムで計算します。リアルタイム計算結果は、追加または更新の形式でリアルタイムストレージシステムに保存されます。 現在、私たちがよく使用するメッセージ キューは Kafka です。当初は、コンピューティング エンジンとして Spark Streaming を使用していました。ストリーム コンピューティング エンジンにおける Flink の利点がますます明らかになったため、最終的に、Flink を統合リアルタイム コンピューティング エンジンとして使用することを決定しました。 2. Kafka を選ぶ理由 Kafka は比較的初期のメッセージ キューですが、NetEase を含む多数のユーザー グループが利用する非常に安定したメッセージ キューです。私たちがメッセージング ミドルウェアとして Kafka を検討している主な理由は次のとおりです。
3. Flink を選ぶ理由 Apache Flink は、近年ますます人気が高まっているオープンソースのビッグデータ ストリーミング コンピューティング エンジンです。バッチ処理とストリーム処理の両方をサポートします。ストリーミング コンピューティング エンジンとして Flink を検討する主な要因は次のとおりです。
4. Kafka + Flink ストリームコンピューティングシステム メッセージミドルウェアとストリームコンピューティングにおける Kafka と Flink の優れたパフォーマンスに基づいて、次の図に示すように、Kafka と Flink に基づくストリームコンピューティングプラットフォームシステムが登場しました。リアルタイムログは、APP、Web などを通じて Kafka に収集され、その後、共通 ETL、グローバル集計、ウィンドウ集計などのリアルタイム計算のために Flink に引き渡されます。 5. Kafka を使用した NetEase Cloud Music の現状 現在、10 を超える Kafka クラスターがあり、各クラスターの主なタスクは異なります。一部はビジネス クラスターとして使用され、一部はミラー クラスターとして使用され、一部はコンピューティング クラスターとして使用されます。現在の Kafka クラスターのノードの総数は 200 以上に達し、単一の Kafka のピーク QPS は 400 万以上です。現在、NetEase Cloud Music には、Kafka + Flink に基づく 500 を超えるリアルタイム タスクがあります。 2. Flink+Kafka プラットフォームの設計上記の状況を踏まえ、私たちはKafka+Flinkをユーザーの開発コストや運用保守コストを削減するプラットフォームとして開発したいと考えています。実際、2018年にはFlinkをベースにしたリアルタイムコンピューティングプラットフォームの構築を開始しており、その中でKafkaが重要な役割を果たしました。今年は、ユーザーがFlinkとKafkaをより便利に、より簡単に利用できるようにするために、リファクタリングを行いました。 Flink 1.0 をベースに Magina バージョンをリファクタリングしました。 API レベルでは、DataStream および SQL 操作を実行するための Magina SQL と Magina SDK を提供しました。次に、Magina SQL Parser をカスタマイズしてこれらの SQL を論理プランに変換し、論理プランを物理的な実行コードに変換しました。このプロセス中に、カタログを介してメタデータ管理センターに接続し、いくつかのメタデータ情報を取得しました。 Kafka を使用する場合、Kafka メタデータ情報をメタデータ センターに登録し、ストリーム テーブルの形式でリアルタイム データにアクセスします。 Magina では、Kafka を主に 3 つの方法で使用します。
ユーザーは、メタデータ管理センターにさまざまなテーブル情報やカタログ情報を登録したり、DB に Kafka テーブルを作成して管理したりできます。使用中、ユーザーは個人的なニーズに応じて対応するテーブルを使用するだけです。次の図は、Kafka ストリーム テーブルの主な参照ロジックを示しています。 3. リアルタイムデータウェアハウスにおける Kafka の応用1. 問題解決を通じて成長する リアルタイム データ ウェアハウスで Kafka を使用する過程で、さまざまな問題が発生し、さまざまな解決策を試しました。 プラットフォームの初期の頃は、リアルタイム コンピューティング用のクラスターが 2 つと、コレクション クラスターが 1 つしかありませんでした。 1 つのトピックのデータ量が非常に大きかったです。異なるリアルタイムタスクが同じ大容量のトピックを消費し、Kafka クラスターの IO 圧力が非常に高くなりました。 そのため、使用中に Kafka に異常に高い負荷がかかり、遅延や I/O の急増が頻繁に発生することが判明しました。 上記の問題を解決するために、大規模なトピックをリアルタイムで配信することを考えました。 Flink 1.5をベースに、次の図のようなデータ配信プログラムを設計しました。これがリアルタイムデータウェアハウスのプロトタイプです。大きなトピックを小さなトピックに分散するこの方法に基づいて、クラスターへの負荷が大幅に軽減され、パフォーマンスが向上します。さらに、当初は静的な配布ルールが使用されていました。後からルールを追加する必要がある場合、タスクを再開する必要があり、ビジネスに大きな影響を与えていました。その後、動的ルールを使用してデータ配布のタスクを完了することを検討しました。 プラットフォームの初期段階で遭遇した問題を解決した後、Kafka はプラットフォームの進化の過程で新たな問題に直面しました。
上記の問題に対処するために、次の図に示すように、Kafka クラスターの分離とデータの階層化を実装しました。簡単に言えば、クラスターを DS クラスター、ログ収集クラスター、および配布クラスターに分割するプロセスです。データは配信サービスを通じて処理のために Flink に配信され、その後、データクリーニングを通じて DW クラスターに入ります。同時に、DW 書き込みプロセス中にミラー クラスターに同期されます。このプロセスでは、Flink を使用してリアルタイム計算統計とスプライシングも実行され、生成された ADS データはオンライン ADS クラスターと統計 ADS クラスターに書き込まれます。上記のプロセスにより、リアルタイム コンピューティング要件が高いタスクが統計レポートの影響を受けないことが保証されます。 上記のプロセスにより、リアルタイム コンピューティング要件が高いタスクが統計レポートの影響を受けないことが保証されます。しかし、異なるクラスターを分散すると、必然的に新たな問題に直面します。
上記の 2 つの問題に対処するために、次の 2 つの側面でシステムを監視する Kafka 監視システムを開発しました。これにより、例外が発生したときに問題の詳細を判断できます。
2. LambdaアーキテクチャにおけるFlink + Kafkaの応用 ストリーム処理とバッチ処理の統合は現在非常に人気の高いコンセプトであり、多くの企業もこの分野での応用を検討しています。現在、一般的に使用されているアーキテクチャは、Lambda アーキテクチャまたは Kappa アーキテクチャのいずれかです。ストリームとバッチの統合には、ストレージの統合とコンピューティング エンジンの統合を考慮する必要があります。現在のインフラストラクチャには統合ストレージがないため、Lamda アーキテクチャのみを選択できます。 次の図は、Cloud Music における Flink と Kafka に基づく Lambda アーキテクチャの具体的な実践を示しています。上位層はリアルタイムコンピューティング、下位層はオフラインコンピューティングです。水平層はコンピューティング エンジンによって分割され、垂直層はリアルタイム データ ウェアハウスによって分割されます。 4. 問題点と改善点具体的な申請手続きにおいても、多くの問題に遭遇しました。主な問題は 2 つあります。
1. 複数のシンクを伴う Kafka ソースの繰り返し消費問題 Magina プラットフォームは複数のシンクをサポートしているため、操作中に中間結果を異なるストレージに挿入できます。このプロセスで問題が発生します。たとえば、同じ中間結果の異なる部分を異なるストレージに挿入すると、複数の DAG が存在することになります。これらはすべて一時的な結果ですが、Kafka ソースの繰り返し消費を引き起こし、パフォーマンスとリソースの大きな浪費につながります。 そこで、一時的な中間結果の複数回の消費を回避できるかどうか疑問に思いました。バージョン 1.9 より前では、StreamGraph を再構築し、3 つの DataSource の DAG をマージしました。バージョン 1.9 では、Magina はクエリとソースのマージの最適化も提供しました。ただし、同じデータ更新で同じテーブルへのソース参照が複数ある場合は、それらは自動的にマージされますが、同じデータ更新でない場合はすぐにはマージされないことがわかりました。そのため、バージョン 1.9 以降では、この問題を解決するために、modifyOperations 用のバッファーを作成しました。 2. 同じスイッチでのトラフィックの急増によりコンピューティングの遅延が発生する この問題は最近になって発生したばかりで、同じスイッチだけでなく、同じコンピューター ルームでも発生する可能性があります。同じスイッチの下に多数のマシンをデプロイし、そのうちのいくつかには Kafka クラスターをデプロイし、いくつかには Hadoop クラスターをデプロイしました。 Hadoop では、Spark や Hive のオフライン コンピューティングと、Flink のリアルタイム コンピューティングを実行できます。 Flink はリアルタイム コンピューティングに Kafka も使用します。実行プロセス中に、特定のタスクに全体的な遅延が発生することがわかりました。調査の結果、ある時点でスイッチの閲覧が急増した以外は、異常は見つかりませんでした。さらに調査を進めると、オフライン コンピューティングの閲覧の急増が原因であることが判明しました。同じスイッチの帯域幅制限により、Flink のリアルタイム コンピューティングが影響を受けました。 この問題を解決するために、オフライン クラスターとリアルタイム クラスターの相互影響を回避し、スイッチの展開やマシンの展開を最適化することを検討しました。たとえば、オフライン クラスターは別のスイッチを使用し、Kafka クラスターと Flink クラスターも別のスイッチを使用して、ハードウェア レベルで 2 つが相互に影響を与えないようにします。 質疑応答Q1: リアルタイム データ ウェアハウス内の Kafka のデータは信頼できますか? A1:この質問への答えは、データの正確性の定義によって大きく異なります。基準が異なれば答えも異なる可能性があります。まず、どのような状況でデータが信頼できるかを定義し、処理プロセス中に適切なフォールト トレラント メカニズムを備える必要があります。 Q2: 勉強中にこれらの企業が直面している問題をどのように学ぶのでしょうか?こうした問題はどのようにして蓄積されるのでしょうか? A2:個人的には、学習プロセスは問題によって推進されると信じています。問題に遭遇したときは、それをどう解決するかを考える必要があります。解決していく過程で、経験と自分の欠点を蓄積することができます。 Q3: Kafka を処理する際に異常なデータをどのように処理しますか?検出メカニズムはありますか? A3:運行中は配送サービスも行っております。配信プロセスでは、一定のルールに従ってどのデータが異常でどのデータが正常かを検出し、異常データをクエリなどのために異常トピックに個別に配信します。その後、ユーザーは使用中に、関連する指標とキーワードに従って異常トピックのデータを表示できます。 |
<<: 新たな状況下で、中国の VMware になれるのは誰か?
>>: AWS が Amazon EC2 向け Apple macOS インスタンスを開始
前回の記事「本当にSEOをやっていると思いますか?」では、私が考える本当のSEOとは、あらゆる手段を...
ウェブサイトのユーザー エクスペリエンスは、アート、デザイン、プログラミング、戦略、フィードバックを...
ウェブサイトのプロモーションや検索エンジン最適化 (SEO) を行う場合、キーワードの選択は非常に重...
Aperture Science Limited(No. 71892230)は香港に登録されており、...
ソフト記事マーケティングは、中小企業にとって最も一般的に使用されているマーケティングおよびプロモーシ...
変化する市場の需要に適応する必要性は、いくら強調してもし過ぎることはありません。クラウドネイティブ ...
ユーザー エクスペリエンスという言葉は、数え切れないほど多くのウェブマスターの頭の中にありますが、数...
4月11日、Kyligence Indicator Platform製品発表会が盛況のうちに開催され...
1. 7つの大手電子商取引会社が独身の日に向けて準備中:65,000の新しい宅配会社が戦いに備えてい...
Dedecms は現在最も広く使用されているオープンソースのウェブサイト構築システムです。統計による...
インターネットプロモーションは、今日企業が行わなければならない仕事の一つです。インターネット時代にお...
アイトラッカーは、ユーザーの視線の軌跡を記録するユーザー調査ツールとして人気が高まっています。ニュー...
アメリカの老舗ブランドであるSharktechが、特別価格でサーバーを販売しています。シカゴとデンバ...
今日は、「家電製品」(http://www.360buy.com/electronic.html)を...
[[275294]] 1. Javaヒープスペース頻度: 5 つ星原因Javaヒープにオブジェクトを...