はじめに:この記事は、Alibabaの上級技術専門家であるDeng Xiaoyong(Jingxing)によって共有されています。主にデモを使用して、Flinkを介してリアルタイムでpv / uvを計算する方法を示します。
この記事は、Alibabaの上級技術専門家であるDeng Xiaoyong(Jingxing)によって共有されており、主にデモを使用して、Flinkを介してリアルタイムでpv / uvを計算する方法を示しています。内容は以下の部分から実施されます。
- アプリはpv / uvシーンを計算します
- 実施計画(Flink-1.11より)
- DDL
- DML
- 練習
まず、比較的単純なpv / uvシーンを紹介します。次の図に示すAPPを例にとると、ビジネスアーキテクチャ全体には、ユーザーアクセスの入り口、作成者の入り口、オペレーターの入り口など、いくつかの入り口が必要です。オペレーターの入り口に行って、アプリのpv / uvなど、システムのいくつかのインジケーターを表示します。
リアルタイムのpv / uvの計算方法を紹介する前に、まず上の図の10個のフィールドとそれに対応する意味を理解できます。これらのフィールドを通じて、APPでのユーザーの操作はデータベースに対応するレコードを残し、すべてのレコードはAPPでのユーザーの操作フローであることが理解できます。
では、pv / uvをリアルタイムで計算する方法は?
2つのオプションがあります。
オプション1、MySQL変更データはリアルタイム計算のためにKafkaに同期されます。Flinkは、設計の開始時にフローとテーブルの二重性を持っているため、Flinkバージョン1.1以降、Flinkは、一部の変更、削除、およびその他の操作の処理を含め、Kafkaの変更されたデータを処理できます。処理された結果はAlibabaCloud Hologressに配置されます。これは、ユーザーがビッグデータをクエリして分析するのに便利です。
解決策2、上の図から、解決策1には解決策2よりもKafkaが1つしかないことがわかります。Flinkバージョン1.11以降、Debeziumを介してMySQLに直接接続し、Flinkリアルタイム計算を実行して同じ機能を完了することができます。 。
どちらのスキームも実現できるので、どのように選択するのですか?主に事業によって異なります。データが一時的にのみ保存される場合は、ログを表示するか、複数のダウンストリームで使用し、Kafkaに保存する必要があります。ログをバックトラックする必要がない場合、またはダウンストリームでの使用がない場合は、オプション2の方が適しています。適切です。
実際のデモンストレーション
次の図に示すように、オプション2(MySQL-CDCソーステーブルメソッド)を選択して説明します。
最初にリアルタイムコンピューティングのFlinkプラットフォームを開き、左側のSQLエディターをクリックしてから、CreateTableメソッドを使用して上記の10個のフィールドを設定します。これは、データのソースを定義します。
ソースを定義したら、次のステップはターゲットテーブルを作成することです。次の図に示すように、ターゲットテーブルを作成するときに、blackhole_pv_uvテーブルを定義し、実際のストレージのないターゲットエンドを作成して、デバッグ関数として機能させます。最初にロジックを実行してから、ターゲットエンドに移動します。コードを書く。ブラックホールは出力結果データを吸収し、最初にソースと計算の問題に対処します。
上記のテーブルはFlinkカタログに分類され、pv / uvアップストリームおよびダウンストリームテーブルのリアルタイム計算の準備が完了します。テーブルを調整する必要がある場合は、DDLSQLステートメントを使用して調整することもできます。
テーブルを作成する準備をした後、リアルタイムで達成したい目標を計算するにはどうすればよいですか?最も簡単な方法でデモンストレーションします。
最初にデータをBlackholeに書き込み、次にcuurenttime、event_hourなどの4つのフィールド値を計算します。
上の図に示すコードを使用して、データがいつ入力されたか、データのpv / uv値などを計算できます。
記述したばかりのジョブを実行します。
次に、[SQLジョブの作成]をクリックします。
作成が完了したら、[開始]をクリックします。
起動後、[UIのフリンク]をクリックして実行ステータスを表示できます。表示すると、下部に8つのデータレコードが表示されていることがわかります。
データベースに戻ると、対応する8つのデータも表示されます。
実際の結果をホロに書き込む方法は?
コアロジックは上記のリアルタイム計算のロジックと同じです。唯一の違いは、計算結果をholo_pv_uvとバックホールに出力する必要があることです。つまり、同じ結果を2つのコピーで出力する必要があります。 。これは、ストリームコンピューティングでよく発生する状況です。同じジョブでの異なるビジネスロジックまたは計算結果を異なるターゲットに出力する必要がある場合もあります。
リアルタイム計算のFlinkページのSQLエディターを開き、入力ボックスに一時ビューを作成し、ブラックホールとホロにデータを記録します。
この目標を達成するには、beginステートメントsetおよびendという文法を追加する必要があります。これにより、実際には計算ロジックが定義され、それらの間のロジックタスクが同時に実行されます。
次に、展開を完了し、ジョブを作成して開始すると、計算ロジックが成功したことがわかります。
著者:Deng Xiaoyong(静的ライン)
この記事はAlibabaCloudのオリジナルのコンテンツであり、許可なく複製することはできません。