データクレンジング機能は、コンテンツ分割、動的ルーティング、コンテンツエンリッチメント、コンテンツマッピングなど、メッセージ処理のための一般的なテンプレートを提供します。これらのテンプレートをそのまま使用してメッセージを処理することも、特定のニーズに合わせてコードを修正することもできます。
背景情報
データクレンジングタスクは、Function Compute (FC) を利用して、基本的なオペレーター機能を提供します。データクレンジング機能は、ApsaraMQ for RocketMQ、ApsaraMQ for Kafka、ApsaraMQ for MQTT、ApsaraMQ for RabbitMQ、および Simple Message Queue (formerly MNS) をサポートしています。データクレンジングタスクを作成した後、Function Computeコンソールにログインして、コードをカスタマイズしたり、関数の構成を変更したりできます。
|
オペレーター |
説明 |
|
コンテンツ分割 |
正規表現に基づいてメッセージ本文を分割し、結果のメッセージを個別にシンクに送信します。 |
|
動的ルーティング |
一致したメッセージを特定のシンクにルーティングし、一致しなかったメッセージをデフォルトのシンクにルーティングします。 |
|
コンテンツエンリッチメント |
エンリッチメントソースからメッセージ本文をエンリッチします。たとえば、元のメッセージに |
|
コンテンツマッピング |
正規表現に基づいてメッセージ本文をマッピングします。たとえば、メッセージ内の機密フィールドをマスクしたり、メッセージサイズを最小化したりできます。 |
このトピックでは、Message Queue for Apache Kafka を使用してデータクレンジングの使用方法を説明します。
ユースケース
コンテンツ分割
たとえば、メッセージに学生のリストが含まれているとします。
message:
[John, Male, Class 4|Alice, Female, Class 3|David, Male, Class 4]
以下に示すように、メッセージを各学生の個別のレコードに分割し、これらのレコードを別々のシンクに送信できます。
message:
[John, Male, Class 4]
message:
[Alice, Female, Class 3]
message:
[David, Male, Class 4]
動的ルーティング
たとえば、メッセージに歯磨き粉製品のリストが含まれているとします。
message:
[BrandA, toothpaste, $12.98, 100g
BrandB, toothpaste, $7.99, 80g
BrandC, toothpaste, $1.99, 100g]
カスタムルールに基づいて、製品を異なる Topic にルーティングできます。ルールは以下のとおりです:
-
メッセージが BrandA で始まる場合、BrandA-item-topic と BrandA-discount-topic に送信します。
-
メッセージが BrandB で始まる場合、BrandB-item-topic と BrandB-discount-topic に送信します。
-
その他のメッセージは Unknown-brand-topic に送信されます。
以下の JSON オブジェクトは、これらのルールを記述したものです。
{
"defaultTopic": "Unknown-brand-topic",
"rules": [
{
"regex": "^BrandA",
"targetTopics": [
"BrandA-item-topic",
"BrandA-discount-topic"
]
},
{
"regex": "^BrandB",
"targetTopics": [
"BrandB-item-topic",
"BrandB-discount-topic"
]
}
]
}
コンテンツエンリッチメント
この例では、IP アドレスを含むメッセージをエンリッチする方法を示します。サービスアクセスログが次の形式であると仮定します:
{
"accountID": "164901546557****",
"hostIP": "192.168.XX.XX"
}
IP アドレスのソースを特定するために、MySQL データベースに保存されているマッピングを使用します。
処理されたメッセージを以下に示します。CREATE TABLE `tb_ip` (
-> `IP` VARCHAR(256) NOT NULL,
-> `Region` VARCHAR(256) NOT NULL,
-> `ISP` VARCHAR(256) NOT NULL,
-> PRIMARY KEY (`IP`)
-> );
{
"accountID": "164901546557****",
"hostIP": "192.168.XX.XX",
"region": "beijing"
}
コンテンツマッピング
たとえば、メッセージに従業員の ID や電話番号などの個人情報を含む従業員登録情報が含まれているとします。
以下に示すように、メッセージがシンクに送信される前に、従業員の個人情報をマスクできます。John, Employee ID 1, 131 1111 1111
Alice, Employee ID 2, 132 2222 2222
David, Employee ID 3, 133 3333 3333
J***, Employee ID *, *** **** ****
A****, Employee ID *, *** **** ****
D****, Employee ID *, *** **** ****
操作手順
-
ApsaraMQ for Kafka コンソールにログインします。左側のナビゲーションウィンドウで、 を選択し、タスクリストの作成 をクリックします。
-
タスクの作成 ページで、Source (ソース)、Filtering (フィルタリング) 、Transform (変換) 、Sink (ターゲット) の各ステップで、イベントソース、フィルタリングルール、データクレンジングテンプレート、およびイベントシンクを設定します。
[ソース] セクションで、[リージョン] に [中国 (杭州)] を選択し、ターゲットの Kafka インスタンスを選択し、[Topic] に [kafka_test] を選択します。
① Source (ソース)と④ Sink (ターゲット)
ApsaraMQ for Kafka の異なるインスタンスを選択します。
② Filtering (フィルタリング)
このパラメーターはオプションです。このパラメーターを設定しない場合、すべてのイベントが処理されます。マッチングルールの詳細については、「イベントパターン」をご参照ください。
③ Transform (変換)
Function Compute が提供するテンプレート (例:コンテンツ分割、コンテンツマッピング、コンテンツエンリッチメント、動的ルーティング) を選択します。ビジネス要件に基づいてテンプレートを選択できます。これらのテンプレートは、そのまま使用することも、カスタマイズすることもできる基本的なデータ処理ロジックを提供します。
この例では、コンテンツ分割テンプレートを使用します。
[Alibaba Cloud サービス] ドロップダウンリストから [Function Compute (acs:fc:function)] を選択します。[関数テンプレートの作成] を選択し、[関数テンプレート] リストから [コンテンツ分割 (transform_split)] を選択します。生成された関数コードで、ご利用のデータ形式に基づいて
delimiter変数を変更します。デフォルト値は|です。