tencent cloud

Data Transfer Service

Avroデモの説明

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2026-11-05 17:13:22
AI翻訳

コンシューマープログラムの説明

Tencent Cloud DTSは、Avroデータ形式に対して、以下の2種類の消費プログラムを提供します。
Avro Demo(通常):Tencent Cloud DTSデータ購読Avro形式の消費プログラムです。
Avro Demo(Alibaba Cloudサブスクリプションサービスのデータ形式と互換性があります):Tencent Cloud DTSデータ購読Avro形式の消費プログラムです。通常のプログラムと比較して、このプログラムは変換操作を1層追加しています。変換後はAlibaba Cloudサブスクリプションサービスのデータ形式と互換性があり、Alibaba Cloudサブスクリプションサービスから切り替えたユーザーに適しています。
具体的なシナリオは以下の通りです:ユーザーは以前Alibaba Cloud DTSサブスクリプションサービス(Avro形式)を使用していましたが、その後Tencent Cloudに切り替え、Tencent Cloud DTSのサブスクリプションサービスを使用します。Tencent Cloud DTSが提供する消費プログラムは、以前のAlibaba Cloudサブスクリプションサービスのデータ形式と互換性があります。これにより、ユーザーの消費側での適応コストを削減し、消費プログラムに対して簡単な適応を行うだけで迅速に消費できます。

通常のAvroデモのフィールド解説

Demo内のファイルの説明は以下の通りです。Java Demoを例として紹介します。
consumerDemo-avro-java\\src\\main\\resources\\avro-tools-1.8.2.jar:Avroプロトコル関連コードの生成に使用するツールです。
consumerDemo-avro-java\\src\\main\\java\\com\\tencent\\subscribe\\avro:Avroツールがコードを生成するディレクトリです。
consumerDemo-avro-java\\src\\main\\resources\\Record.avsc:プロトコル定義ファイルです。
Record.avscでは14個の構造(Avroではschemaと呼ばれます)を定義しています。その中の主要なデータ構造はRecordであり、binlog内の1件のデータを表すために使用されます。Recordの構造は以下の通りです。その他のデータ構造はRecord.avscで確認できます:
{
"namespace": "com.tencent.subscribe.avro", //Record.avsc の最後の1個のschemaで、"name" は "Record" と表示されます
"type": "record",
"name": "Record", //"name" は "Record" と表示され、kafkaから消費するデータ形式を表します
"fields": [
{
"name": "id", //idはグローバルに増加するIDを示し、その他のrecordの値の説明は以下の表の通りです
"type": "long",
"doc": "unique id of this record in the whole stream"
},
{
"name": "version", //versionはプロトコルバージョンを示します
"type": "int",
"doc": "protocol version"
},
{
"name": "messageType", //メッセージタイプ
"aliases": [
"operation"
],
"type": {
"namespace": "com.tencent.subscribe.avro",
"name": "MessageType",
"type": "enum",
"symbols": [
"INSERT",
"UPDATE",
"DELETE",
"DDL",
"BEGIN",
"COMMIT",
"HEARTBEAT",
"CHECKPOINT",
"ROLLBACK"
]
}
},
{
……
},
}
Record内のフィールドタイプの説明は以下の通りです:
Recordのフィールド名
説明
id
グローバルに増加するID。
version
プロトコルバージョン。現在のバージョンは1です。
messageType
メッセージタイプ。列挙値:「INSERT」、「UPDATE」、「DELETE」、「DDL」、「BEGIN」、「COMMIT」、「HEARTBEAT」、「CHECKPOINT」。
fileName
現在のレコードが存在するbinlogファイル名。
position
現在のレコードのbinlog内での終了オフセット。形式はEnd_log_pos@binlogファイル番号です。例えば、現在のレコードがファイルmysql-bin.000004にあり、終了オフセットが2196の場合、その値は「2196@4」です。
safePosition
現在のトランザクションがbinlog内で開始されるオフセット。形式は上記と同じです。
timestamp
binlogに書き込まれる時間。unixタイムスタンプ、秒単位です。 binlogに記録されたトランザクション内の対応するevent headerにあるtimestampです。ソース側の長時間トランザクション操作により、timestampとreaderTimestampに時間差が生じる場合がありますが、これは正常な状況です。
gtid
現在のgtid。例:c7c98333-6006-11ed-bfc9-b8cef6e1a231:9。
transactionId
トランザクションID。commitイベントのみがトランザクションIDを生成します。
serverId
ソースデータベースのserverId。ソースデータベースのserver_idを確認するには、SHOW VARIABLES LIKE 'server_id'を参照してください。
threadId
現在のトランザクションをコミットしたセッションID。SHOW processlist;を参照してください。
sourceType
ソースデータベースのデータベースタイプ。現在のバージョンではMySQLのみです。
sourceVersion
ソースデータベースのバージョン。ソースデータベースのバージョンを確認するには、select version();を参照してください。
schemaName
データベース名。
tableName
テーブル名。
objectName
形式:データベース名.テーブル名。
columns
テーブル内の各列の定義。
oldColumns
DML実行前の該当行のデータです。insertメッセージの場合、この配列はnullです。配列内の要素には12種類のタイプがあります:Integer、Character、Decimal、Float、Timestamp、DateTime、TimestampWithTimeZone、BinaryGeometry、TextGeometry、BinaryObject、TextObject、EmptyObject。詳細はdemoの定義を参照してください。
newColumns
DML実行後の該当行のデータです。deleteメッセージの場合、この配列はnullです。配列内の要素には12種類のタイプがあります:Integer、Character、Decimal、Float、Timestamp、DateTime、TimestampWithTimeZone、BinaryGeometry、TextGeometry、BinaryObject、TextObject、EmptyObject。詳細はdemoの定義を参照してください。
sql
DDLのSQL文。
executionTime
DDLの実行時間。単位は秒です。
heartbeatTimestamp
ハートビートメッセージのタイムスタンプ。秒単位です。このフィールドはheartbeatメッセージにのみ存在します。
syncedGtid
DTSが解析済みのGTIDセット。形式は例:c7c98333-6006-11ed-bfc9-b8cef6e1a231:1-13。
fakeGtid
構築された偽のGTIDかどうか。gtid_modeがオフの場合、DTSはGTIDを構築します。
pkNames
ソースデータベースのテーブルにPKが設定されている場合、DMLメッセージにこのパラメータが含まれます。設定されていない場合は含まれません。
readerTimestamp
DTSがこのデータを処理する時間。unixタイムスタンプ、単位はミリ秒です。
tags
QueryEvent内のstatus_varsです。詳細はQueryEventを参照してください。
total
メッセージがシャードされる場合、シャードの総数を記録します。現在のバージョン(version=1)では意味がなく、将来の拡張のために予約されています。
index
メッセージがシャードされる場合、現在のシャードのインデックスを記録します。現在のバージョン(version=1)では意味がなく、将来の拡張のために予約されています。
Record内で列属性を記述するフィールドは「Field」であり、以下の4つの属性を含みます:
name:列名。
dataTypeNumber:binlogに記録されるデータ型です。値の詳細はMySQLを参照してください。
isKey:PKかどうか。
originalType:DDLで定義されたタイプです。

Alibaba Cloudサブスクリプションサービスのデータ形式と互換性のあるAvroデモのフィールド解説

消費Demo内の主要ファイルの説明は以下の通りです:
ファイル/ディレクトリ
説明
resources/Record.avsc
Tencent Cloud avroデータ構造定義ファイル(阿里雲形式への変換を容易にするため、ここではRecord-ali.avscで定義されているIntegerなどの基本型を借用しています)。
resources/Record-ali.avsc
阿里雲 avroデータ構造定義ファイル。
java/com/ClassConvertor
Tencent Cloudのデータ構造を阿里雲のデータ構造に変換するためのツールクラスです。
java/com/UserBusinessProcess
ユーザービジネスロジッククラスです。Kafkaメッセージをデシリアライズして阿里雲のデータ形式に変換してからここに渡し、一定のビジネスロジックを実行します。
本Demoでは、SQL文の出力または解析機能のみを実装しています。ユーザーは業務ニーズに応じてここで独自に拡張してください。以前の阿里雲コンシューマープログラムの業務処理コードをここに移行し、簡単に適応させるだけでコンパイルして実行することもできます。
データ形式はcom.alibaba.dts.formats.avro.Recordであり、具体的なフィールドの説明は以下の通りです:
フィールド名称
タイプ
説明
version
int
プロトコルバージョン。現在のバージョンは2です。
id
long
グローバルに増加するId。
sourceTimestamp
long
現在のレコードがbinlogイベント内で持つタイムスタンプで、秒単位です。
sourcePosition
String
現在のレコードのbinlog内での終了オフセット。形式はEnd_log_pos@binlogファイル番号です。例えば、現在のレコードがファイルmysql-bin.000004にあり、終了オフセットが2196の場合、その値は「2196@4」です。
safeSourcePosition
String
現在のトランザクションがbinlog内で開始されるオフセット。形式は上記と同じです。
sourceTxid
String
トランザクションId。COMMITレコードのみがこのフィールドを保持します。
source
com.alibaba.dts.formats.avro.Source
ソースデータベースのタイプとバージョン情報。
operation
com.alibaba.dts.formats.avro.Operation
メッセージタイプ。INSERT、UPDATE、DELETE、DDL、BEGIN、COMMIT、ROLLBACK、HEARTBEAT、CHECKPOINTをサポートします。
objectName
String
データベース名.テーブル名。
processTimestamps
List
DTSサブスクリプションサービスがデータを処理するタイムスタンプ。未実装です。
tags
Map<String,String>
いくつかの追加情報。現在サポートされているキーには、thread_id、server_id、pk_uk_info、readerThroughoutTime、GTID、GTID_SETが含まれます。
fields
Object
テーブル内の各列の定義、つまりヘッダーです。
beforeImages
Object
DML実行前の該当行のデータです。insertメッセージの場合、この配列はnullです。配列内の要素には12種類のタイプがあります:Integer、Character、Decimal、Float、Timestamp、DateTime、TimestampWithTimeZone、BinaryGeometry、TextGeometry、BinaryObject、TextObject、EmptyObject。
afterImages
Object
DML実行後の該当行のデータです。deleteメッセージの場合、この配列はnullです。配列内の要素には12種類のタイプがあります:Integer、Character、Decimal、Float、Timestamp、DateTime、TimestampWithTimeZone、BinaryGeometry、TextGeometry、BinaryObject、TextObject、EmptyObject。
bornTimestamp
long
未実装です。Tencent Cloud DTSサブスクリプションサービスには対応するフィールドはありません。

データベースフィールドのマッピング関係

以下は、データベース(MySQLなど)のフィールドタイプとAvroプロトコルで定義されたデータ型との間のマッピング関係です。
MySQL タイプ
Avro における型
MYSQL_TYPE_NULL
EmptyObject
MYSQL_TYPE_INT8
Integer
MYSQL_TYPE_INT16
Integer
MYSQL_TYPE_INT24
Integer
MYSQL_TYPE_INT32
Integer
MYSQL_TYPE_INT64
Integer
MYSQL_TYPE_BIT
Integer
MYSQL_TYPE_YEAR
DateTime
MYSQL_TYPE_FLOAT
Float
MYSQL_TYPE_DOUBLE
Float
MYSQL_TYPE_VARCHAR
Character
MYSQL_TYPE_STRING
Character、元の型がbinaryの場合、BinaryObjectに対応します。
MYSQL_TYPE_VAR_STRING
Character、元の型がvarbinaryの場合、BinaryObjectに対応します。
MYSQL_TYPE_TIMESTAMP
Timestamp
MYSQL_TYPE_DATE
DateTime
MYSQL_TYPE_TIME
DateTime
MYSQL_TYPE_DATETIME
DateTime
MYSQL_TYPE_TIMESTAMP_NEW
Timestamp
MYSQL_TYPE_DATE_NEW
DateTime
MYSQL_TYPE_TIME_NEW
DateTime
MYSQL_TYPE_DATETIME_NEW
DateTime
MYSQL_TYPE_ENUM
TextObject
MYSQL_TYPE_SET
TextObject
MYSQL_TYPE_DECIMAL
Decimal
MYSQL_TYPE_DECIMAL_NEW
Decimal
MYSQL_TYPE_JSON
TextObject
MYSQL_TYPE_BLOB
BinaryObject
MYSQL_TYPE_TINY_BLOB
BinaryObject
MYSQL_TYPE_MEDIUM_BLOB
BinaryObject
MYSQL_TYPE_LONG_BLOB
BinaryObject
MYSQL_TYPE_GEOMETRY
BinaryObject

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック