Log Service (SLS) コネクタの使用方法について説明します。
背景情報
Simple Log Service はログデータ向けのエンドツーエンドサービスです。ログデータの収集、消費、転送、クエリ、分析を効率的に行うことができ、運用保守 (O&M) 効率を向上させ、大量のログデータを処理できます。
SLS コネクタの機能は次の表のとおりです。
カテゴリ | 説明 |
サポートされるタイプ | ソーステーブルおよび結果テーブル |
実行モード | ストリーミングモードのみ |
コネクタ固有のメトリック | N/A |
データフォーマット | N/A |
API タイプ | SQL、DataStream API、およびデータインジェスト YAML API |
結果テーブルでのデータ更新または削除 | 結果テーブルは追記専用であり、データの更新や削除はできません。 |
特徴
SLS ソースコネクタは、メッセージ属性フィールドを直接読み取ります。サポートされるフィールドは次の表のとおりです。
パラメーター | 型 | 説明 |
__source__ | STRING METADATA VIRTUAL | メッセージのソース。 |
__topic__ | STRING METADATA VIRTUAL | メッセージのトピック。 |
__timestamp__ | BIGINT METADATA VIRTUAL | 時間を記録。 |
__tag__ | MAP<VARCHAR, VARCHAR> METADATA VIRTUAL | メッセージのタグ。 たとえば、属性 |
前提条件
Log Service プロジェクトおよび Logstore を作成済みである必要があります。詳細については、「プロジェクトおよび Logstore の作成」をご参照ください。
制限事項
Ververica Runtime (VVR) 11.1 以降でのみ、YAML で定義されたデータインジェストにおいて SLS を同期ソースとして使用できます。
SLS コネクタは at-least-once セマンティクスのみを保証します。
source parallelismをシャード数より高く設定しないでください。これによりリソースが無駄になります。また、Ververica Runtime (VVR) 8.0.5 以前では、シャード数の変更により自動failover機能が失敗し、一部のシャードが消費されなくなる可能性があります。
SQL
構文
CREATE TABLE sls_table(
a INT,
b INT,
c VARCHAR
) WITH (
'connector' = 'sls',
'endPoint' = '<yourEndPoint>',
'project' = '<yourProjectName>',
'logStore' = '<yourLogStoreName>',
'accessId' = '${secret_values.ak_id}',
'accessKey' = '${secret_values.ak_secret}'
);オプション付き
一般
パラメーター
説明
型
必須
デフォルト
備考
connector
使用するコネクタ。
String
はい
なし
slsに設定します。endPoint
Log Service (SLS) のエンドポイント。
String
はい
なし
Log Service (SLS) の VPC アクセスアドレスを指定します。詳細については、「サービスエンドポイント」をご参照ください。
説明デフォルトでは、Realtime Compute for Apache Flink はインターネットにアクセスできません。Virtual Private Cloud (VPC) からインターネットへのアクセスを有効にするには、NAT Gateway を使用します。詳細については、「インターネットへのアクセス方法」をご参照ください。
SLS へのインターネット経由のアクセスは推奨しません。やむを得ずインターネット経由でアクセスする場合は、HTTPS を使用し、転送アクセラレーションを有効にしてください。詳細については、「転送アクセラレーションの管理」をご参照ください。
project
SLS プロジェクトの名前。
String
はい
なし
N/A
logStore
Logstore または Metricstore の名前。
String
はい
なし
Logstore のデータは、Metricstore のデータと同様に消費されます。
accessId
ご利用の Alibaba Cloud アカウントの AccessKey ID。
String
はい
なし
詳細については、「AccessKey ペアの取得」をご参照ください。
重要AccessKey ペアが公開されないようにするため、AccessKey ID および AccessKey Secret を変数で指定することを推奨します。詳細については、「プロジェクト変数」をご参照ください。
accessKey
ご利用の Alibaba Cloud アカウントの AccessKey Secret。
String
はい
なし
ソース固有
パラメーター
説明
型
必須
デフォルト
備考
enableNewSource
FLIP-27 インターフェイスを実装する新しいデータソースを使用するかどうかを指定します。
Boolean
いいえ
false
新しいソースは、シャードの変更に自動的に適応し、すべてのソースサブタスク間でシャードを可能な限り均等に分散できます。
重要このオプションは VVR 8.0.9 以降でのみサポートされています。VVR 11.1 以降ではデフォルト値が
trueです。このオプションの値を変更すると、保存された状態からジョブを復元できなくなります。履歴オフセットから消費を再開するには、まず
consumerGroupオプションを使用してジョブを開始し、SLS コンシューマーグループに消費進捗を記録します。その後、consumeFromCheckpointオプションをtrueに設定し、状態なしでジョブを再起動します。Logstore に読み取り専用のシャードがある場合、一部のサブタスクが自身のシャードの処理を終了した後も、他のシャードからデータを要求し続ける可能性があります。これによりワークロードが不均衡になり、パフォーマンスに影響を与えることがあります。この問題を軽減するには、並列度を調整するか、スケジューリング戦略を最適化するか、小さなシャードをマージしてシャード数を減らし、タスク割り当てを簡素化してください。
shardDiscoveryIntervalMs
動的なシャード検出の間隔。
Long
いいえ
60000
動的検出を無効にするには、このオプションを負の値に設定します。単位:ミリ秒。
説明値は 60,000 ミリ秒 (1 分) 以上である必要があります。
このオプションは
enableNewSourceがtrueに設定されている場合にのみ有効です。このオプションは VVR 8.0.9 以降でのみサポートされています。
startupMode
ソーステーブルの起動モード。
String
いいえ
timestamp
timestamp(デフォルト):指定された開始時刻からログを消費します。latest:最新のオフセットからログの消費を開始します。earliest:最小オフセットからログの消費を開始します。consumer_group:コンシューマーグループに記録されたオフセットからログの消費を開始します。コンシューマーグループがシャードの消費オフセットを記録していない場合、最小オフセットから消費を開始します。
重要VVR 11.1 より前のバージョンでは、consumer_group 値はサポートされていません。
consumeFromCheckpointをtrueに設定する必要があります。この場合、指定されたコンシューマーグループに記録されたオフセットからログの消費を開始し、起動モードの設定は無効になります。
startTime
ログ消費の開始時刻。
String
いいえ
現在時刻
形式は
yyyy-MM-dd hh:mm:ssです。これは
startupModeがtimestampに設定されている場合にのみ有効です。説明startTimeおよびstopTimeオプションは、SLS 内の__timestamp__属性ではなく、__receive_time__属性に基づいています。stopTime
ログ消費の終了時刻。
String
いいえ
なし
形式は
yyyy-MM-dd hh:mm:ssです。説明このオプションは過去のログを消費する場合にのみ使用され、過去の時刻に設定する必要があります。将来の時刻に設定すると、新しいログが書き込まれない場合に消費が早期に停止し、エラーメッセージなしでデータフローが中断される可能性があります。
Flink ジョブがすべてのログを消費した後に終了するようにするには、
exitAfterFinishをtrueに設定する必要があります。
consumerGroup
コンシューマーグループの名前。
String
いいえ
なし
コンシューマーグループは消費進捗を記録するために使用されます。固定フォーマットなしで任意の名前を指定できます。
説明異なる Flink ジョブでは、異なるコンシューマーグループを使用する必要があります。複数の Flink ジョブで同じコンシューマーグループを使用すると、それらは連携せず、各ジョブがすべてのデータを消費します。これは、Flink が SLS からデータを消費する際に、SLS コンシューマーグループを使用してパーティション割り当てを行わないためです。その結果、同じコンシューマーグループを共有していても、各コンシューマーは独立してメッセージを消費します。
consumeFromCheckpoint
コンシューマーグループのチェックポイントから消費するかどうかを指定します。
String
いいえ
false
true:コンシューマーグループも指定する必要があります。Flink プログラムは、コンシューマーグループに保存されたチェックポイントからログの消費を開始します。コンシューマーグループに対応するチェックポイントがない場合、startTime 設定値から消費を開始します。false(デフォルト値):指定されたコンシューマーグループに保存されたチェックポイントからログの消費を開始しません。
重要このパラメーターは VVR 11.1 以降ではサポートされていません。これらのバージョンでは、
startupModeオプションをconsumer_groupに設定する必要があります。maxRetries
SLS からの読み取り失敗後の再試行回数。
String
いいえ
3
N/A
batchGetSize
1 回のリクエストで読み取るロググループの数。
String
いいえ
100
batchGetSize設定は 1000 を超えることはできません。超えるとエラーが報告されます。exitAfterFinish
すべてのデータを消費した後に Flink ジョブを終了するかどうかを指定します。
String
いいえ
false
true:Flink プログラムはすべてのデータを消費した後に終了します。false(デフォルト):Flink プログラムはデータ消費完了後も終了しません。
query
重要このオプションは VVR 11.3 で非推奨となりましたが、以降のバージョンでも互換性があります。
消費前にデータを前処理するためのクエリ文。
String
いいえ
なし
このオプションを使用して、Flink が消費する前に SLS データをフィルター処理し、コストを削減し処理速度を向上させます。
たとえば、
'query' = '*| where request_method = ''GET'''は、Flink が SLS からデータを読み取る前に、request_methodフィールドの値が 'GET' であるデータをマッチングすることを示します。説明このオプションは Log Service (SLS) の SPL 言語を使用します。詳細については、「SPL 構文」をご参照ください。
重要このオプションは VVR 8.0.1 以降でのみサポートされています。
この機能には Log Service (SLS) 料金が発生します。詳細については、「Log Service の課金」をご参照ください。
processor
データ前処理用の SLS プロセッサの名前。
queryとprocessorの両方が指定されている場合、queryが優先され、processorは無視されます。String
いいえ
なし
このオプションは、Flink が消費する前に SLS データをフィルター処理し、コストを削減し処理速度を向上させます。
queryの代わりにprocessorを使用することを推奨します。たとえば、
'processor' = 'test-filter-processor'は、SLS プロセッサが Flink が SLS からデータを読み取る前にデータをフィルター処理することを示します。重要このオプションは VVR 11.3 以降でのみサポートされています。
この機能には Log Service (SLS) 料金が発生します。詳細については、「Log Service の課金」をご参照ください。
シンク固有
パラメーター
説明
型
必須
デフォルト
備考
topicField
ログトピックを示す
__topic__属性を上書きするフィールドを指定します。String
いいえ
なし
このオプションの値は、テーブル内に存在するフィールドである必要があります。
timeField
ログ書き込み時刻を示す
__timestamp__属性を上書きするフィールドを指定します。String
いいえ
現在時刻
このオプションの値は、テーブル内に存在する
INTフィールドである必要があります。このオプションを指定しない場合、現在時刻が使用されます。sourceField
ログソース (ログを生成したマシンの IP アドレスなど) を示す
__source__属性を上書きするフィールドを指定します。String
いいえ
なし
このオプションの値は、テーブル内に存在するフィールドである必要があります。
partitionField
パーティション分割用のフィールドを指定します。このフィールドの値のハッシュにより、どのシャードがデータを受信するかが決定され、同じハッシュを持つレコードが同じシャードに送信されるようになります。
String
いいえ
なし
このオプションを指定しない場合、各レコードは利用可能なシャードにランダムに書き込まれます。
buckets
partitionFieldが指定されている場合、ハッシュ値のマッピングに使用するバケット数を定義します。String
いいえ
64
値は [1, 256] の範囲内の 2 のべき乗である必要があります。バケット数はシャード数以上である必要があります。そうでない場合、一部のシャードがデータを受信しない可能性があります。
flushIntervalMs
データ書き込み間隔。
String
いいえ
2000
単位:ミリ秒。
writeNullProperties
null 値を空文字列として SLS に書き込むかどうかを指定します。
Boolean
いいえ
true
true(デフォルト値):null 値をログに空文字列として書き込みます。false:null と評価されるフィールドはログに書き込まれません。
説明このオプションは VVR 8.0.6 以降でのみサポートされています。
データ型マッピング
Flink 型 | SLS 型 |
BOOLEAN | STRING |
VARBINARY | |
VARCHAR | |
TINYINT | |
INTEGER | |
BIGINT | |
FLOAT | |
DOUBLE | |
DECIMAL |
データインジェスト (パブリックプレビュー)
制限事項
この機能は Realtime Compute for Apache Flink バージョン 11.1 以降でのみサポートされています。
構文
source:
type: sls
name: SLS Source
endpoint: <endpoint>
project: <project>
logstore: <logstore>
accessId: <accessId>
accessKey: <accessKey>パラメーター
パラメーター | 説明 | 型 | 必須 | デフォルト | 備考 | ||||||||||
type | データソースのタイプ。 | String | はい | なし | 値は | ||||||||||
endpoint | Log Service (SLS) のエンドポイント。 | String | はい | なし | Log Service (SLS) の VPC アクセスアドレス。詳細については、「サービスエンドポイント」をご参照ください。 説明
| ||||||||||
accessId | ご利用の Alibaba Cloud アカウントの AccessKey ID。 | String | はい | なし | 詳細については、「AccessKey ID および AccessKey Secret 情報の確認方法」をご参照ください。 重要 AccessKey 情報が公開されないようにするため、AccessKey 値をプロジェクト変数で指定することを推奨します。詳細については、「プロジェクト変数」をご参照ください。 | ||||||||||
accessKey | ご利用の Alibaba Cloud アカウントの AccessKey Secret。 | String | はい | なし | |||||||||||
project | Log Service (SLS) プロジェクトの名前。 | String | はい | なし | なし | ||||||||||
logStore | SLS Logstore または Metricstore の名前。 | String | はい | なし | Logstore のデータは、Metricstore のデータと同様に消費されます。 | ||||||||||
schema.inference.strategy | スキーマ推論戦略。 | String | いいえ | continuous |
| ||||||||||
maxPreFetchLogGroups | 初期スキーマ推論のために各シャードから読み取るロググループの最大数。 | Integer | いいえ | 50 | ジョブがデータを読み取り処理する前に、コネクタは各シャードから指定された数のロググループを事前に消費し、スキーマ情報を初期化します。 | ||||||||||
shardDiscoveryIntervalMs | シャードの変更を動的に検出する間隔 (ミリ秒単位)。 | Long | いいえ | 60000 | 動的検出を無効にするには、このパラメーターを負の値に設定します。 説明 値は 60,000 ミリ秒 (1 分) 以上である必要があります。 | ||||||||||
startupMode | 起動モード。 | String | いいえ | なし |
| ||||||||||
startTime | ログ消費の開始時刻。 | String | いいえ | 現在時刻 | 形式は このパラメーターは 説明
| ||||||||||
stopTime | ログ消費の終了時刻。 | String | いいえ | なし | 形式は 説明 Flink ジョブがすべてのログを消費した後に終了するようにするには、 | ||||||||||
consumerGroup | コンシューマーグループの名前。 | String | いいえ | なし | コンシューマーグループは消費進捗を記録します。任意のカスタム名を指定できます。 | ||||||||||
batchGetSize | 1 回のリクエストで読み取るロググループの数。 | Integer | いいえ | 100 | batchGetSize の値は 1,000 を超えることはできません。超えるとエラーが発生します。 | ||||||||||
maxRetries | Log Service (SLS) からの読み取りに失敗した場合の再試行回数。 | Integer | いいえ | 3 | なし | ||||||||||
exitAfterFinish | すべてのデータを消費した後に Flink ジョブを終了するかどうかを指定します。 | Boolean | いいえ | false |
| ||||||||||
query | Log Service (SLS) からデータを消費する際の前処理文。 | String | いいえ | なし | このパラメーターを使用して、消費前に Log Service (SLS) のデータをフィルター処理し、コストを削減し処理速度を向上させます。 たとえば、 説明 クエリは Log Service の SPL 構文を使用する必要があります。詳細については、「SPL 構文」をご参照ください。 重要
| ||||||||||
compressType | Log Service (SLS) の圧縮タイプ。 | String | いいえ | なし | サポートされる圧縮タイプは次のとおりです。
| ||||||||||
timeZone |
| String | いいえ | なし | デフォルトでは、オフセットは追加されません。 | ||||||||||
regionId | Log Service (SLS) がデプロイされているリージョン。 | String | いいえ | なし | 詳細については、「サポート対象リージョン」をご参照ください。 | ||||||||||
signVersion | Log Service (SLS) のリクエスト署名バージョン。 | String | いいえ | なし | 詳細については、「リクエスト署名」をご参照ください。 | ||||||||||
shardModDivisor | Logstore シャードから読み取る際に使用する除数。 | Int | いいえ | -1 | 詳細については、「シャード」をご参照ください。 | ||||||||||
shardModRemainder | Logstore シャードから読み取る際に使用する剰余。 | Int | いいえ | -1 | 詳細については、「シャード」をご参照ください。 | ||||||||||
metadata.list | ダウンストリームジョブに渡すメタデータカラム。 | String | いいえ | なし | 利用可能なメタデータフィールドには、 | ||||||||||
decode.table-id.fields | Log Service (SLS) からログデータを解析する際に、Table ID の生成に使用するフィールドを指定します。 | String | いいえ | なし | 複数のフィールドは英語のカンマ
説明 このパラメーターは Realtime Compute for Apache Flink バージョン 11.6 以降でサポートされています。 | ||||||||||
fixed-types | Log Service (SLS) からログデータを解析する際に、特定のフィールドのデータ型を指定します。 | String | いいえ | なし | データを解析する際に、特定のフィールドの型を指定します。複数のフィールド定義はカンマ 説明 このパラメーターは Realtime Compute for Apache Flink バージョン 11.6 以降でサポートされています。 | ||||||||||
timestamp-format.standard | Log Service (SLS) からのログデータ内のタイムスタンプフィールドのフォーマット。 | String | いいえ | SQL | 有効な値:
説明 このパラメーターは Realtime Compute for Apache Flink バージョン 11.6 以降でサポートされています。 | ||||||||||
ingestion.ignore-errors | データ解析中に発生したエラーを無視するかどうかを指定します。 | Boolean | いいえ | false | 説明 このパラメーターは Realtime Compute for Apache Flink バージョン 11.6 以降でサポートされています。 | ||||||||||
ingestion.error-tolerance.max-count |
| Integer | いいえ | -1 | このパラメーターは 説明 このパラメーターは Realtime Compute for Apache Flink バージョン 11.6 以降でサポートされています。 |
既存のカタログの再利用
Realtime Compute for Apache Flink バージョン 11.5 以降では、Flink CDC データインジェストジョブで Data Management ページに作成された組み込み SLS カタログを参照できます。これにより、接続プロパティを手動で指定する必要がなくなります。
source:
type: sls
using.built-in-catalog: sls_catalog現在、データインジェストジョブは組み込み SLS カタログから次のパラメーターを自動的に再利用できます。
endpoint
project
accessId
accessKey
これらの自動再利用パラメーターを上書きするには、YAML 構成で明示的に定義できます。YAML ファイルで定義されたパラメーターが優先されます。
データ型マッピング
fixed-types が構成されていない場合、次のデータ型マッピングが適用されます。
SLS 型 | CDC 型 |
STRING | STRING |
fixed-types が構成されている場合、システムは指定された型を使用してデータを解析します。
スキーマ推論と進化
シャードデータの事前消費とスキーマ初期化
SLS コネクタは、読み取り中の Logstore のスキーマを維持します。Logstore からデータを読み取る前に、コネクタは各シャードから最大
maxPreFetchLogGroups個のロググループを事前に消費します。各ログエントリのスキーマを解析し、マージしてテーブルのスキーマを初期化します。その後、データ消費を開始する前に、この初期スキーマに基づいてテーブル作成イベントが生成されます。説明各シャードについて、コネクタはスキーマを解析するために、現在時刻の 1 時間前からデータの消費を試行します。
プライマリキー情報
Log Service (SLS) ログにはプライマリキー情報が含まれていません。変換ルールを使用して、手動でテーブルにプライマリキーを追加できます。
transform: - source-table: <project>.<logstore> projection: * primary-keys: key1, key2スキーマ推論とスキーマ変更
スキーマが初期化された後、schema.inference.strategy が
staticに設定されている場合、SLS コネクタは各ログエントリを初期スキーマに基づいて解析し、スキーマ変更イベントを生成しません。schema.inference.strategy がcontinuousに設定されている場合、コネクタは各ログエントリを解析し、物理カラムを推論して現在のスキーマと比較します。推論されたスキーマが現在のスキーマと不一致の場合、次のルールに従ってスキーマをマージします。推論された物理カラムに現在のスキーマにないフィールドが含まれている場合、コネクタはこれらのフィールドをスキーマに追加し、NULL 可能なカラムを追加するイベントを生成します。
推論された物理カラムに現在のスキーマに存在するフィールドが不足している場合、コネクタはこれらのフィールドを保持し、データを NULL で埋め、カラム削除イベントは生成しません。
SLS コネクタは、各ログエントリ内のすべてのフィールドのデータ型を String として推論します。現在、新しいカラムの追加のみがサポートされています。コネクタは新しいカラムをスキーマの末尾に追加し、NULL 可能に設定します。
コード例
ソーステーブルおよび結果テーブルの SQL
CREATE TEMPORARY TABLE sls_input( `time` BIGINT, url STRING, dt STRING, float_field FLOAT, double_field DOUBLE, boolean_field BOOLEAN, `__topic__` STRING METADATA VIRTUAL, `__source__` STRING METADATA VIRTUAL, `__timestamp__` STRING METADATA VIRTUAL, __tag__ MAP<VARCHAR, VARCHAR> METADATA VIRTUAL, proctime as PROCTIME() ) WITH ( 'connector' = 'sls', 'endpoint' ='cn-hangzhou-intranet.log.aliyuncs.com', 'accessId' = '${secret_values.ak_id}', 'accessKey' = '${secret_values.ak_secret}', 'starttime' = '2023-08-30 00:00:00', 'project' ='sls-test', 'logstore' ='sls-input' ); CREATE TEMPORARY TABLE sls_sink( `time` BIGINT, url STRING, dt STRING, float_field FLOAT, double_field DOUBLE, boolean_field BOOLEAN, `__topic__` STRING, `__source__` STRING, `__timestamp__` BIGINT , receive_time BIGINT ) WITH ( 'connector' = 'sls', 'endpoint' ='cn-hangzhou-intranet.log.aliyuncs.com', 'accessId' = '${ak_id}', 'accessKey' = '${ak_secret}', 'project' ='sls-test', 'logstore' ='sls-output' ); INSERT INTO sls_sink SELECT `time`, url, dt, float_field, double_field, boolean_field, `__topic__` , `__source__` , `__timestamp__` , cast(__tag__['__receive_time__'] as bigint) as receive_time FROM sls_input;SLS データソースを使用したデータインジェスト
SLS をデータソースとして使用し、サポートされているダウンストリームシステムにリアルタイムでデータをインジェストします。たとえば、次の構成は、logstore から Data Lake Formation (DLF) 内の Paimon 形式のデータレイクにデータを書き込むデータインジェストジョブを定義しています。このジョブは、結果テーブルのスキーマを自動的に推論し、実行時にスキーマ進化をサポートします。
source:
type: sls
name: SLS Source
endpoint: ${endpoint}
project: test_project
logstore: test_log
accessId: ${accessId}
accessKey: ${accessKey}
# テーブルにプライマリキーを追加します。
transform:
- source-table: \.*.\.*
projection: \*
primary-keys: id
# test_project.test_log のすべてのデータを test_database.inventory テーブルにルーティングします。
route:
- source-table: test_project.test_log
sink-table: test_database.inventory
sink:
type: paimon
catalog.properties.metastore: rest
catalog.properties.uri: dlf_uri
catalog.properties.warehouse: your_warehouse
catalog.properties.token.provider: dlf
# (オプション) 読み取りパフォーマンスを向上させるために削除ベクターを有効にします。
table.properties.deletion-vectors.enabled: trueDataStream API
DataStream API を使用してデータを読み書きするには、DataStream コネクタを使用します。詳細については、「DataStream コネクタの使用方法」をご参照ください。
VVR バージョン 8.0.10 より前を使用している場合、依存関係が不足しているためにジョブが開始できない可能性があります。この問題を解決するには、対応する uber-JAR を追加の依存関係として追加してください。
SLS からの読み取り
Realtime Compute for Apache Flink は、Simple Log Service (SLS) からデータを読み取るための SourceFunction 実装である SlsSourceFunction クラスを提供します。次の例は、SLS からデータを読み取ります。
public class SlsDataStreamSource {
public static void main(String[] args) throws Exception {
// ストリーミング実行環境を設定します。
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// SLS ソースを作成し、データをコンソールに出力します。
env.addSource(createSlsSource())
.map(SlsDataStreamSource::convertMessages)
.print();
env.execute("SLS Stream Source");
}
private static SlsSourceFunction createSlsSource() {
SLSAccessInfo accessInfo = new SLSAccessInfo();
accessInfo.setEndpoint("yourEndpoint");
accessInfo.setProjectName("yourProject");
accessInfo.setLogstore("yourLogStore");
accessInfo.setAccessId("yourAccessId");
accessInfo.setAccessKey("yourAccessKey");
// batch get size は必須です。
accessInfo.setBatchGetSize(10);
// オプションパラメーター
accessInfo.setConsumerGroup("yourConsumerGroup");
accessInfo.setMaxRetries(3);
// 消費の開始時刻を現在時刻に設定します。
int startInSec = (int) (new Date().getTime() / 1000);
// 消費の停止時刻。-1 は停止しないことを意味します。
int stopInSec = -1;
return new SlsSourceFunction(accessInfo, startInSec, stopInSec);
}
private static List<String> convertMessages(SourceRecord input) {
List<String> res = new ArrayList<>();
for (FastLogGroup logGroup : input.getLogGroups()) {
int logsCount = logGroup.getLogsCount();
for (int i = 0; i < logsCount; i++) {
FastLog log = logGroup.getLogs(i);
int fieldCount = log.getContentsCount();
for (int idx = 0; idx < fieldCount; idx++) {
FastLogContent f = log.getContents(idx);
res.add(String.format("key: %s, value: %s", f.getKey(), f.getValue()));
}
}
}
return res;
}
}SLS への書き込み
Realtime Compute for Apache Flink は、SLS にデータを書き込むための OutputFormat 実装である SLSOutputFormat クラスを提供します。次の例は、SLS にデータを書き込みます。
public class SlsDataStreamSink {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.fromSequence(0, 100)
.map((MapFunction<Long, SinkRecord>) aLong -> getSinkRecord(aLong))
.addSink(createSlsSink())
.name(SlsDataStreamSink.class.getSimpleName());
env.execute("SLS Stream Sink");
}
private static OutputFormatSinkFunction createSlsSink() {
Configuration conf = new Configuration();
conf.setString(SLSOptions.ENDPOINT, "yourEndpoint");
conf.setString(SLSOptions.PROJECT, "yourProject");
conf.setString(SLSOptions.LOGSTORE, "yourLogStore");
conf.setString(SLSOptions.ACCESS_ID, "yourAccessId");
conf.setString(SLSOptions.ACCESS_KEY, "yourAccessKey");
SLSOutputFormat outputFormat = new SLSOutputFormat(conf);
return new OutputFormatSinkFunction<>(outputFormat);
}
private static SinkRecord getSinkRecord(Long seed) {
SinkRecord record = new SinkRecord();
LogItem logItem = new LogItem((int) (System.currentTimeMillis() / 1000));
logItem.PushBack("level", "info");
logItem.PushBack("name", String.valueOf(seed));
logItem.PushBack("message", "it's a test message for " + seed.toString());
record.setContent(logItem);
return record;
}
}XML
SLS DataStream コネクタ は Maven セントラルリポジトリで入手可能です。
<dependency>
<groupId>com.alibaba.ververica</groupId>
<artifactId>ververica-connector-sls</artifactId>
<version>${vvr-version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.flink</groupId>
<artifactId>flink-format-common</artifactId>
</exclusion>
</exclusions>
</dependency>よくある質問
Flink プログラムの復元時に TaskManager で OOM (java.lang.OutOfMemoryError: Java heap space) が発生した場合の対処方法