Tablestore シンクコネクターは、サブスクライブしたトピックから Kafka のメッセージをポーリングし、メッセージレコードを解析して、Tablestore のデータテーブルにデータを一括でインポートします。
前提条件
-
Kafka がインストールされ、ZooKeeper と Kafka の両方が実行されていること。 詳細については、「Kafka の公式ドキュメント」をご参照ください。
-
Tablestore サービスを有効化し、インスタンスとデータテーブルを作成済みであること。 詳細については、「ワイドテーブルモデルのクイックスタート」をご参照ください。
説明Tablestore シンクコネクターを使用して、宛先のデータテーブルを自動的に作成することもできます。 これを行うには、
auto.createパラメーターをtrueに設定します。 -
AccessKey を取得済みであること。 詳細については、「AccessKey の作成」をご参照ください。
ステップ1: Tablestore シンクコネクターのデプロイ
-
Tablestore シンクコネクターは、次のいずれかの方法で取得できます。
-
GitHub からソースコードをダウンロードしてコンパイルします。 ソースコードはTablestore シンクコネクターのソースコードから入手できます。
-
次のコマンドを実行して、Tablestore シンクコネクターのソースコードをダウンロードします。
git clone https://github.com/aliyun/kafka-connect-tablestore.git -
ダウンロードしたソースコードのディレクトリに移動し、次のコマンドを実行して Maven でコードをパッケージ化します。
mvn clean package -DskipTestsコンパイルが完了すると、生成されたパッケージ (例:kafka-connect-tablestore-1.0.jar) が target ディレクトリに保存されます。
-
-
コンパイル済みのkafka-connect-tablestore パッケージをダウンロードします。
-
-
各ノードの $KAFKA_HOME/libs ディレクトリにパッケージをコピーします。
ステップ2: Tablestore シンクコネクターの起動
Tablestore シンクコネクターは、スタンドアロンと分散の 2 つの実行モードをサポートしています。 要件に応じてモードを選択できます。
スタンドアロンモード
-
必要に応じて、ワーカー設定ファイル connect-standalone.properties とコネクター設定ファイル connect-tablestore-sink-quickstart.properties を変更します。
-
ワーカー設定ファイル connect-standalone.properties の例
ワーカー設定には、Kafka の接続設定、シリアル化形式、オフセットのコミット頻度などのパラメーターが含まれます。 この例は、Kafka の公式ドキュメントに基づいています。 詳細については、「Kafka Connect」をご参照ください。
# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # これらはデフォルト設定です。このファイルは、いくつかの設定をオーバーライドする方法を示すためのものです。 bootstrap.servers=localhost:9092 # コンバーターは、Kafka のデータ形式と、それを Connect データに変換する方法を指定します。すべての Connect ユーザーは、Kafka からロードまたは Kafka に保存するデータの形式に基づいて、これらを設定する必要があります。 key.converter=org.apache.kafka.connect.json.JsonConverter value.converter=org.apache.kafka.connect.json.JsonConverter # コンバーター固有の設定は、適用したいコンバーターの設定にプレフィックスを付けることで渡すことができます。 key.converter.schemas.enable=true value.converter.schemas.enable=true offset.storage.file.filename=/tmp/connect.offsets # 通常より高速にフラッシュします。これはテストやデバッグに役立ちます。 offset.flush.interval.ms=10000 # プラグイン (コネクター、コンバーター、トランスフォーメーション) のクラスローディング分離を有効にするには、ファイルシステムパスのリストをカンマ (、) で区切って設定します。リストは、以下のいずれかの組み合わせを含むトップレベルのディレクトリで構成する必要があります。 # # a) プラグインとその依存関係を含む JAR を直接含むディレクトリ # b) プラグインとその依存関係を含む uber-jar # c) プラグインとその依存関係のクラスのパッケージディレクトリ構造を直接含むディレクトリ # 注:シンボリックリンクは、依存関係やプラグインを検出するためにたどられます。 # 例: # plugin.path=/usr/local/share/java,/usr/local/share/kafka/plugins,/opt/connectors, #plugin.path= -
コネクター設定ファイルのサンプル: connect-tablestore-sink-quickstart.properties
コネクター設定には、コネクタークラス、Tablestore 接続、データマッピングなどのパラメーターが含まれます。 詳細については、「設定」をご参照ください。
# コネクター名を設定します。 name=tablestore-sink # コネクタークラスを指定します。 connector.class=TableStoreSinkConnector # タスクの最大数を設定します。 tasks.max=1 # データのエクスポート元となる Kafka トピックのリストを指定します。 topics=test # 以下は Tablestore 接続パラメーターの設定です。 # Tablestore インスタンスのエンドポイント。 tablestore.endpoint=https://xxx.xxx.ots.aliyuncs.com # ご自身の AccessKey ID と AccessKey Secret。 tablestore.access.key.id =xxx tablestore.access.key.secret=xxx # Tablestore インスタンス名。 tablestore.instance.name=xxx # 宛先の Tablestore テーブル名のフォーマット文字列。は元のトピック名のプレースホルダーです。デフォルト値は です。 # 例: # table.name.format=kafka_ の場合、'test' トピックからのメッセージレコードは 'kafka_test' データテーブルに書き込まれます。 table.name.format= # プライマリキーモード。デフォルト値は kafka です。 # Tablestore データテーブルのプライマリキーは、 _ (アンダースコア "_" で区切られた Kafka のトピックとパーティション) と (パーティション内のメッセージレコードのオフセット) で構成されます。 # primarykey.mode= # 宛先テーブルを自動的に作成します。デフォルト値は false です。 auto.create=true
-
-
$KAFKA_HOME ディレクトリに移動し、次のコマンドを実行して、スタンドアロンモードでコネクターを起動します。
bin/connect-standalone.sh config/connect-standalone.properties config/connect-tablestore-sink-quickstart.properties
分散モード
-
必要に応じて、ワーカー設定ファイル connect-distributed.properties を変更します。
ワーカー設定には、Kafka 接続設定、シリアル化形式、オフセットのコミット頻度などのパラメーターが含まれます。 また、各コネクターの情報を保存するトピックも指定します。 これらのトピックは事前に作成しておく必要があります。 この例は、Kafka の公式ドキュメントに基づいています。 詳細については、「Kafka Connect」をご参照ください。
-
offset.storage.topic: 各コネクターのオフセットを保存するために使用されるコンパクトトピック。 -
config.storage.topic: コネクターとタスクの設定を保存するために使用されるコンパクトトピック。 このトピックのパーティション数は 1 に設定する必要があります。 -
status.storage.topic: Kafka Connect のステータス情報を保存するために使用されるコンパクトトピック。
## # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. ## # このファイルには、Kafka Connect 分散ワーカーの設定の一部が含まれています。このファイルはサンプルで使用することを目的としており、一部の設定 (特に `bootstrap.servers` やレプリケーション係数を指定する設定) は本番システムで使用されるものとは異なる場合があります。 # Kafka クラスターへの初期接続を確立するために使用するホスト/ポートのペアのリスト。 bootstrap.servers=localhost:9092 # Connect クラスターグループを形成するために使用される、クラスターの一意の名前。これはコンシューマーグループ ID と競合してはなりません。 group.id=connect-cluster # コンバーターは、Kafka のデータ形式と、それを Connect データに変換する方法を指定します。すべての Connect ユーザーは、Kafka からロードまたは Kafka に保存するデータの形式に基づいて、これらを設定する必要があります。 key.converter=org.apache.kafka.connect.json.JsonConverter value.converter=org.apache.kafka.connect.json.JsonConverter # コンバーター固有の設定は、適用したいコンバーターの設定にプレフィックスを付けることで渡すことができます。 key.converter.schemas.enable=true value.converter.schemas.enable=true # オフセットを保存するために使用するトピック。このトピックは多数のパーティションを持ち、レプリケートおよびコンパクションされる必要があります。 # Kafka Connect は必要に応じてトピックを自動的に作成しようとしますが、特定のトピック設定が必要な場合は、Kafka Connect を起動する前にいつでも手動でトピックを作成できます。 # ほとんどのユーザーは、組み込みのデフォルトのレプリケーション係数 3 を使用するか、場合によってはさらに大きな値を指定します。 # これは、使用される最大のレプリケーション係数と同じ数のブローカーが少なくとも必要であることを意味するため、この例を単一ブローカーのクラスターで実行できるように、ここではレプリケーション係数を 1 に設定しています。 offset.storage.topic=connect-offsets offset.storage.replication.factor=1 #offset.storage.partitions=25 # コネクターとタスクの設定を保存するために使用するトピック。これは単一パーティションで、高度にレプリケートされ、コンパクションされたトピックである必要があることに注意してください。Kafka Connect は必要に応じてトピックを自動的に作成しようとしますが、特定のトピック設定が必要な場合は、Kafka Connect を起動する前にいつでも手動でトピックを作成できます。 # ほとんどのユーザーは、組み込みのデフォルトのレプリケーション係数 3 を使用するか、場合によってはさらに大きな値を指定します。 # これは、使用される最大のレプリケーション係数と同じ数のブローカーが少なくとも必要であることを意味するため、この例を単一ブローカーのクラスターで実行できるように、ここではレプリケーション係数を 1 に設定しています。 config.storage.topic=connect-configs config.storage.replication.factor=1 # ステータスを保存するために使用するトピック。このトピックは複数のパーティションを持つことができ、レプリケートおよびコンパクションされる必要があります。 # Kafka Connect は必要に応じてトピックを自動的に作成しようとしますが、特定のトピック設定が必要な場合は、Kafka Connect を起動する前にいつでも手動でトピックを作成できます。 # ほとんどのユーザーは、組み込みのデフォルトのレプリケーション係数 3 を使用するか、場合によってはさらに大きな値を指定します。 # これは、使用される最大のレプリケーション係数と同じ数のブローカーが少なくとも必要であることを意味するため、この例を単一ブローカーのクラスターで実行できるように、ここではレプリケーション係数を 1 に設定しています。 status.storage.topic=connect-status status.storage.replication.factor=1 #status.storage.partitions=5 # 通常より高速にフラッシュします。これはテストやデバッグに役立ちます。 offset.flush.interval.ms=10000 # これらは、REST ホストとポートの設定が存在することをユーザーに通知するために提供されます。 # REST API がリッスンするホスト名とポート。これが設定されている場合、リクエストをリッスンするために使用されるインターフェイスにバインドされます。 #rest.host.name= #rest.port=8083 # 他のワーカーが接続するために通知されるホスト名とポート (つまり、他のサーバーからルーティング可能な URL)。 #rest.advertised.host.name= #rest.advertised.port= # プラグイン (コネクター、コンバーター、トランスフォーメーション) のクラスローディング分離を有効にするには、ファイルシステムパスのリストをカンマ (、) で区切って設定します。リストは、以下のいずれかの組み合わせを含むトップレベルのディレクトリで構成する必要があります。 # # a) プラグインとその依存関係を含む JAR を直接含むディレクトリ # b) プラグインとその依存関係を含む uber-jar # c) プラグインとその依存関係のクラスのパッケージディレクトリ構造を直接含むディレクトリ # 例: # plugin.path=/usr/local/share/java,/usr/local/share/kafka/plugins,/opt/connectors, #plugin.path= -
-
$KAFKA_HOME ディレクトリに移動し、次のコマンドを実行して、分散モードでコネクターを起動します。
重要各ノードでワーカープロセスを起動します。
bin/connect-distributed.sh config/connect-distributed.properties -
REST API を使用してコネクターを管理できます。 詳細については、「REST API」をご参照ください。
-
config パスに connect-tablestore-sink-quickstart.json ファイルを作成し、次のサンプルコンテンツを追加します。
コネクター設定ファイルでは、JSON 形式のキーと値のペアでパラメーターを指定します。 これらのパラメーターには、コネクタークラス、Tablestore 接続設定、データマッピングなどが含まれます。 詳細については、「設定」をご参照ください。
{ "name": "tablestore-sink", "config": { "connector.class":"TableStoreSinkConnector", "tasks.max":"1", "topics":"test", "tablestore.endpoint":"https://xxx.xxx.ots.aliyuncs.com", "tablestore.access.key.id":"xxx", "tablestore.access.key.secret":"xxx", "tablestore.instance.name":"xxx", "table.name.format":"<topic>", "primarykey.mode":"kafka", "auto.create":"true" } } -
次のコマンドを実行して、Tablestore シンクコネクターを起動します。
curl -i -k -H "Content-type: application/json" -X POST -d @config/connect-tablestore-sink-quickstart.json http://localhost:8083/connectorshttp://localhost:8083/connectorsは Kafka REST サービスのアドレスです。 必要に応じてこのアドレスを変更してください。
-
ステップ3: 新しいレコードの生成
-
$KAFKA_HOME ディレクトリに移動し、次のコマンドを実行して、コンソールプロデューサーを起動します。
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic testパラメーターの説明については、次の表をご参照ください。
設定項目
例
説明
--broker-list
localhost:9092
Kafka クラスターのブローカーのアドレスとポート。
--topic
test
トピック名。Tablestore シンクコネクターの起動時に、デフォルトでトピックが自動作成されます。 トピックを手動で作成することもできます。
-
test トピックにメッセージを書き込みます。
-
Struct 型のメッセージ
{ "schema":{ "type":"struct", "fields":[ { "type":"int32", "optional":false, "field":"id" }, { "type":"string", "optional":false, "field":"product" }, { "type":"int64", "optional":false, "field":"quantity" }, { "type":"double", "optional":false, "field":"price" } ], "optional":false, "name":"record" }, "payload":{ "id":1, "product":"foo", "quantity":100, "price":50 } } -
Map 型のメッセージ
{ "schema":{ "type":"map", "keys":{ "type":"string", "optional":false }, "values":{ "type":"int32", "optional":false }, "optional":false }, "payload":{ "id":1 } }
-
-
Tablestore コンソールにログインしてデータを表示します。
Tablestore インスタンスに test という名前のデータテーブルが自動的に作成されます。 クエリ結果テーブルには、
topic_partition(プライマリキー)、offset(プライマリキー)、id、price、product、quantityの列が含まれます。 サンプルデータでは、最初のレコードの topic_partition はtest_34、offset は0、id は1、price は50.0、product はfoo、quantity は100です。 2番目のレコードの topic_partition はtest_3、offset は0、id はAAAAAQ==で、他のフィールドは空です。