すべてのプロダクト
Search
ドキュメントセンター

Realtime Compute for Apache Flink:Log Service (SLS)

最終更新日:Apr 25, 2026

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

メッセージのタグ。

たとえば、属性 "__tag__:__receive_time__":"1616742274" の場合、'__receive_time__' と '1616742274' がマップ内のキーと値のペアとして格納されます。SQL で値にアクセスするには、__tag__['__receive_time__'] を使用します。

前提条件

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 分) 以上である必要があります。

    • このオプションは enableNewSourcetrue に設定されている場合にのみ有効です。

    • このオプションは VVR 8.0.9 以降でのみサポートされています。

    startupMode

    ソーステーブルの起動モード。

    String

    いいえ

    timestamp

    • timestamp (デフォルト):指定された開始時刻からログを消費します。

    • latest:最新のオフセットからログの消費を開始します。

    • earliest:最小オフセットからログの消費を開始します。

    • consumer_group:コンシューマーグループに記録されたオフセットからログの消費を開始します。コンシューマーグループがシャードの消費オフセットを記録していない場合、最小オフセットから消費を開始します。

    重要
    • VVR 11.1 より前のバージョンでは、consumer_group 値はサポートされていません。consumeFromCheckpointtrue に設定する必要があります。この場合、指定されたコンシューマーグループに記録されたオフセットからログの消費を開始し、起動モードの設定は無効になります。

    startTime

    ログ消費の開始時刻。

    String

    いいえ

    現在時刻

    形式は yyyy-MM-dd hh:mm:ss です。

    これは startupModetimestamp に設定されている場合にのみ有効です。

    説明

    startTime および stopTime オプションは、SLS 内の __timestamp__ 属性ではなく、__receive_time__ 属性に基づいています。

    stopTime

    ログ消費の終了時刻。

    String

    いいえ

    なし

    形式は yyyy-MM-dd hh:mm:ss です。

    説明
    • このオプションは過去のログを消費する場合にのみ使用され、過去の時刻に設定する必要があります。将来の時刻に設定すると、新しいログが書き込まれない場合に消費が早期に停止し、エラーメッセージなしでデータフローが中断される可能性があります。

    • Flink ジョブがすべてのログを消費した後に終了するようにするには、exitAfterFinishtrue に設定する必要があります。

    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 プロセッサの名前。queryprocessor の両方が指定されている場合、query が優先され、processor は無視されます。

    String

    いいえ

    なし

    このオプションは、Flink が消費する前に SLS データをフィルター処理し、コストを削減し処理速度を向上させます。query の代わりに processor を使用することを推奨します。

    たとえば、 'processor' = 'test-filter-processor' は、SLS プロセッサが Flink が SLS からデータを読み取る前にデータをフィルター処理することを示します。

    説明

    このオプションは Log Service (SLS) の SPL 言語を使用します。詳細については、「SPL 構文」をご参照ください。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

はい

なし

値は sls である必要があります。

endpoint

Log Service (SLS) のエンドポイント。

String

はい

なし

Log Service (SLS) の VPC アクセスアドレス。詳細については、「サービスエンドポイント」をご参照ください。

説明
  • デフォルトでは、Realtime Compute for Apache Flink はインターネットにアクセスできません。Virtual Private Cloud (VPC) とインターネット間の通信を有効にするには、NAT Gateway を使用できます。詳細については、「インターネットへのアクセス方法」をご参照ください。

  • Log Service (SLS) へのインターネット経由のアクセスは推奨しません。やむを得ずインターネット経由でアクセスする場合は、HTTPS を使用し、SLS の転送アクセラレーションを有効にしてください。

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

  • continuous:各データレコードに対してスキーマ推論を実行します。スキーマが互換性のない場合、より広いスキーマを推論し、スキーマ変更イベントを生成します。

  • static:ジョブ開始時に一度だけスキーマ推論を実行します。その後のデータは初期スキーマに基づいて解析され、スキーマ変更イベントは生成されません。

maxPreFetchLogGroups

初期スキーマ推論のために各シャードから読み取るロググループの最大数。

Integer

いいえ

50

ジョブがデータを読み取り処理する前に、コネクタは各シャードから指定された数のロググループを事前に消費し、スキーマ情報を初期化します。

shardDiscoveryIntervalMs

シャードの変更を動的に検出する間隔 (ミリ秒単位)。

Long

いいえ

60000

動的検出を無効にするには、このパラメーターを負の値に設定します。

説明

値は 60,000 ミリ秒 (1 分) 以上である必要があります。

startupMode

起動モード。

String

いいえ

なし

  • timestamp (デフォルト):特定のタイムスタンプからログを消費します。

  • latest:最新のオフセットからログを消費します。

  • earliest:最小オフセットからログを消費します。

  • consumer_group:コンシューマーグループに記録されたオフセットからログを消費します。シャードのオフセットが記録されていない場合、最小オフセットから消費を開始します。

startTime

ログ消費の開始時刻。

String

いいえ

現在時刻

形式は yyyy-MM-dd HH:mm:ss です。

このパラメーターは startupModetimestamp に設定されている場合にのみ有効です。

説明

startTime および stopTime パラメーターは、Log Service (SLS) 内の __timestamp__ 属性ではなく、__receive_time__ 属性に基づいています。

stopTime

ログ消費の終了時刻。

String

いいえ

なし

形式は yyyy-MM-dd HH:mm:ss です。

説明

Flink ジョブがすべてのログを消費した後に終了するようにするには、exitAfterFinish=true も設定する必要があります。

consumerGroup

コンシューマーグループの名前。

String

いいえ

なし

コンシューマーグループは消費進捗を記録します。任意のカスタム名を指定できます。

batchGetSize

1 回のリクエストで読み取るロググループの数。

Integer

いいえ

100

batchGetSize の値は 1,000 を超えることはできません。超えるとエラーが発生します。

maxRetries

Log Service (SLS) からの読み取りに失敗した場合の再試行回数。

Integer

いいえ

3

なし

exitAfterFinish

すべてのデータを消費した後に Flink ジョブを終了するかどうかを指定します。

Boolean

いいえ

false

  • true:Flink ジョブはすべてのデータを消費した後に終了します。

  • false (デフォルト):Flink ジョブはすべてのデータを消費した後も終了しません。

query

Log Service (SLS) からデータを消費する際の前処理文。

String

いいえ

なし

このパラメーターを使用して、消費前に Log Service (SLS) のデータをフィルター処理し、コストを削減し処理速度を向上させます。

たとえば、'query' = '*| where request_method = ''GET''' は、Flink がデータを読み取る前に request_method フィールドが 'GET' であるデータをフィルター処理することを示します。

説明

クエリは Log Service の SPL 構文を使用する必要があります。詳細については、「SPL 構文」をご参照ください。

重要
  • Log Service (SLS) でこの機能が利用可能なリージョンについては、「ルールに基づくログの消費」をご参照ください。

  • この機能はパブリックプレビュー中であり、現時点では無料です。将来的にはこの機能に対して料金が発生する可能性があります。詳細については、「料金」をご参照ください。

compressType

Log Service (SLS) の圧縮タイプ。

String

いいえ

なし

サポートされる圧縮タイプは次のとおりです。

  • lz4

  • deflate

  • zstd

timeZone

startTime および stopTime のタイムゾーン。

String

いいえ

なし

デフォルトでは、オフセットは追加されません。

regionId

Log Service (SLS) がデプロイされているリージョン。

String

いいえ

なし

詳細については、「サポート対象リージョン」をご参照ください。

signVersion

Log Service (SLS) のリクエスト署名バージョン。

String

いいえ

なし

詳細については、「リクエスト署名」をご参照ください。

shardModDivisor

Logstore シャードから読み取る際に使用する除数。

Int

いいえ

-1

詳細については、「シャード」をご参照ください。

shardModRemainder

Logstore シャードから読み取る際に使用する剰余。

Int

いいえ

-1

詳細については、「シャード」をご参照ください。

metadata.list

ダウンストリームジョブに渡すメタデータカラム。

String

いいえ

なし

利用可能なメタデータフィールドには、__source____topic____timestamp__、および __tag__ が含まれます。複数のフィールドはカンマで区切ります。

decode.table-id.fields

Log Service (SLS) からログデータを解析する際に、Table ID の生成に使用するフィールドを指定します。

String

いいえ

なし

複数のフィールドは英語のカンマ , で区切ります。たとえば、アップストリームの SLS ログレコードが {"col0":"a", "col1":"b", "col2":"c"} の場合、パラメーター構成別の結果は次のとおりです。

構成

Table ID

なし

すべてのメッセージは Project.Logstore

col0

a

col0,col1

a.b

col0,col1,col2

a.b.c

説明

このパラメーターは Realtime Compute for Apache Flink バージョン 11.6 以降でサポートされています。

fixed-types

Log Service (SLS) からログデータを解析する際に、特定のフィールドのデータ型を指定します。

String

いいえ

なし

データを解析する際に、特定のフィールドの型を指定します。複数のフィールド定義はカンマ , で区切ります。たとえば、id BIGINT, name VARCHAR(10) は、id フィールドの型を BIGINT に、name フィールドの型を VARCHAR(10) に指定します。

説明

このパラメーターは Realtime Compute for Apache Flink バージョン 11.6 以降でサポートされています。

timestamp-format.standard

Log Service (SLS) からのログデータ内のタイムスタンプフィールドのフォーマット。

String

いいえ

SQL

有効な値:

  • SQL:yyyy-MM-dd HH:mm:ss.s{precision} 形式 (例:2020-12-30 12:13:14.123) の入力タイムスタンプを解析し、同じ形式で出力します。

  • ISO-8601:yyyy-MM-ddTHH:mm:ss.s{precision} 形式 (例:2020-12-30T12:13:14.123) の入力タイムスタンプを解析し、同じ形式で出力します。

説明

このパラメーターは Realtime Compute for Apache Flink バージョン 11.6 以降でサポートされています。

ingestion.ignore-errors

データ解析中に発生したエラーを無視するかどうかを指定します。

Boolean

いいえ

false

説明

このパラメーターは Realtime Compute for Apache Flink バージョン 11.6 以降でサポートされています。

ingestion.error-tolerance.max-count

ingestion.ignore-errors が有効になっている場合、累積エラー数がこの値を超えるとジョブが失敗します。

Integer

いいえ

-1

このパラメーターは ingestion.ignore-errors が有効になっている場合にのみ有効です。デフォルト値 -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.strategystatic に設定されている場合、SLS コネクタは各ログエントリを初期スキーマに基づいて解析し、スキーマ変更イベントを生成しません。schema.inference.strategycontinuous に設定されている場合、コネクタは各ログエントリを解析し、物理カラムを推論して現在のスキーマと比較します。推論されたスキーマが現在のスキーマと不一致の場合、次のルールに従ってスキーマをマージします。

    • 推論された物理カラムに現在のスキーマにないフィールドが含まれている場合、コネクタはこれらのフィールドをスキーマに追加し、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: true

DataStream 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) が発生した場合の対処方法