このチュートリアルでは、MirrorMaker 2.0 ソースコネクタを使用して、Managed Service for Apache Kafka クラスタ間でデータを複製する方法について説明します。
クラスタは同じプロジェクトに配置することも、異なるプロジェクトに配置することもできます。また、同じリージョンに配置することも、異なるリージョンに配置することもできます。このチュートリアルでは、リージョン間で同じプロジェクト内のレプリケーションを設定します。ただし、他の組み合わせの手順は同じです。
アーキテクチャ
このシナリオでは、次の 3 つのクラスタがあります。
データが複製されている Kafka クラスタ。このクラスタはデータのソースであるため、ソースクラスタと呼ばれます。
複製されたデータが書き込まれる Kafka クラスタ。このクラスタは、ターゲット クラスタと呼ばれます。
MirrorMaker 2.0 ソース コネクタを作成して管理できる Connect クラスタ。
Connect クラスタがターゲット クラスタにアタッチされます。書き込みオペレーションのレイテンシを最小限に抑えるには、Connect クラスタをターゲット クラスタと同じリージョンに配置します。
次の図に、これらのコンポーネントを示します。

データ レプリケーションは、MirrorMaker 2.0 ソースコネクタによって実行されます。このシナリオでは、他の 2 つの MirrorMaker 2.0 コネクタは省略可能です。
MirrorMaker 2.0 チェックポイント コネクタ: ターゲット クラスタのコンシューマーがソース クラスタと同じポイントから処理を再開できるようにすることで、シームレスなフェイルオーバーを実現します。
MirrorMaker 2.0 ハートビート コネクタ: ソース Kafka クラスタで定期的なハートビート メッセージを生成します。これにより、データ複製の状態とステータスをモニタリングできます。
このチュートリアルでは、これらのオプションのコネクタは使用しません。詳細については、MirrorMaker 2.0 を使用するタイミングをご覧ください。
始める前に
コンソール
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分も差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Managed Kafka API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Managed Kafka API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
プロジェクトに次のロールがあることを確認します。 マネージド Kafka クラスタ編集者、マネージド Kafka Connect クラスタ編集者、マネージド Kafka コネクタ編集者
ロールを確認する
-
Google Cloud コンソールで、[IAM] ページに移動します。
IAM に移動 - プロジェクトを選択します。
-
[プリンシパル] 列で、自分または自分が所属するグループの行をすべて確認します。所属するグループについては、管理者にお問い合わせください。
- 自分のメールアドレスを含む行の [ロール] 列で、ロールのリストに必要なロールが含まれているかどうか確認します。
ロールを付与する
-
Google Cloud コンソールで、[IAM] ページに移動します。
IAM に移動 - プロジェクトを選択します。
- [ アクセスを許可] をクリックします。
-
[新しいプリンシパル] フィールドに、ユーザー ID を入力します。 これは通常、Google アカウントのメールアドレスです。
- [ロールを選択] をクリックし、ロールを検索します。
- 追加のロールを付与するには、 [別のロールを追加] をクリックして各ロールを追加します。
- [保存] をクリックします。
-
gcloud
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分も差し上げます。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず フェデレーション ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init -
Google Cloud プロジェクトを作成または選択します。
プロジェクトの選択または作成に必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、
resourcemanager.projects.create権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。詳しくは、ロールを付与する方法をご覧ください。
-
Google Cloud プロジェクトを作成します。
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクトの名前に置き換えます。
Managed Kafka API がまだ有効になっていない場合は、有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法を確認する。gcloud services enable managedkafka.googleapis.com
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず フェデレーション ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init -
Google Cloud プロジェクトを作成または選択します。
プロジェクトの選択または作成に必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、
resourcemanager.projects.create権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。詳しくは、ロールを付与する方法をご覧ください。
-
Google Cloud プロジェクトを作成します。
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクトの名前に置き換えます。
Managed Kafka API がまだ有効になっていない場合は、有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法を確認する。gcloud services enable managedkafka.googleapis.com
-
ユーザー アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。
roles/managedkafka.clusterEditor, roles/managedkafka.connectClusterEditor, roles/managedkafka.connectorEditorgcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
次のように置き換えます。
PROJECT_ID: プロジェクト ID。USER_IDENTIFIER: ユーザー アカウントの識別子。例:myemail@example.comROLE: ユーザー アカウントに付与する IAM ロール。
ソース Kafka クラスタを作成する
このステップでは、Managed Service for Apache Kafka クラスタを作成します。このクラスタは、レプリケートするデータを含むソースクラスタです。
コンソール
[Managed Service for Apache Kafka] > [クラスタ] ページに移動します。
[ 作成] をクリックします。
[クラスタ名] フィールドに、クラスタの名前を入力します。
[リージョン] リストで、クラスタのロケーションを選択します。
[ネットワーク構成] で、クラスタがアクセスできるサブネットを構成します。
- [プロジェクト] で、該当するプロジェクトを選択します。
- [ネットワーク] で、プロジェクト内の VPC ネットワークを選択します。
- [サブネット] でサブネットを選択します。
- [完了] をクリックします。
[作成] をクリックします。
クラスタの作成中は、クラスタの状態が Creating になります。クラスタの作成が完了すると、状態は Active になります。
gcloud
移行元の Kafka クラスタを作成するには、managed-kafka clusters create コマンドを実行します。
gcloud managed-kafka clusters create SOURCE_KAFKA_CLUSTER \
--location=SOURCE_REGION \
--cpu=3 \
--memory=3GiB \
--subnets=projects/PROJECT_ID/regions/SOURCE_REGION/subnetworks/SOURCE_SUBNET \
--async
次のように置き換えます。
SOURCE_KAFKA_CLUSTER: Kafka クラスタの名前SOURCE_REGION: クラスタのロケーションサポートされているロケーションについては、Managed Service for Apache Kafka のロケーションをご覧ください。
PROJECT_ID: プロジェクト IDSOURCE_SUBNET: クラスタをデプロイするサブネット(例:default)
このコマンドは非同期で実行され、オペレーション ID を返します。
Check operation [projects/PROJECT_ID/locations/SOURCE_SUBNET/operations/OPERATION_ID] for status.
作成オペレーションの進行状況を追跡するには、gcloud managed-kafka operations describe コマンドを使用します。
gcloud managed-kafka operations describe OPERATION_ID \
--location=SOURCE_REGION
詳細については、クラスタ作成オペレーションをモニタリングするをご覧ください。
Kafka トピックを作成する
ソース クラスタの準備ができたら、次のようにトピックを作成します。
コンソール
[Managed Service for Apache Kafka] > [クラスタ] ページに移動します。
クラスタの名前をクリックします。
クラスタの詳細ページで、 [トピックを作成] をクリックします。
[トピック名] ボックスに、トピックの名前を入力します。
[作成] をクリックします。
gcloud
Kafka トピックを作成するには、managed-kafka topics create コマンドを実行します。
gcloud managed-kafka topics create TOPIC_NAME \
--cluster=SOURCE_KAFKA_CLUSTER \
--location=SOURCE_REGION \
--partitions=10 \
--replication-factor=3
次のように置き換えます。
TOPIC_NAME: 作成する Kafka トピックの名前SOURCE_KAFKA_CLUSTER: ソースクラスタの名前SOURCE_REGION: ソースクラスタを作成したリージョン
ターゲット Kafka クラスタを作成する
このステップでは、2 つ目の Managed Service for Apache Kafka クラスタを作成します。このクラスタは、MirrorMaker 2.0 がデータを複製するターゲット クラスタです。
コンソール
[Managed Service for Apache Kafka] > [クラスタ] ページに移動します。
[ 作成] をクリックします。
[クラスタ名] フィールドに、クラスタの名前を入力します。
[リージョン] リストで、クラスタのロケーションを選択します。ソースクラスタが配置されているリージョンとは異なるリージョンを選択します。
[ネットワーク構成] で、ターゲット クラスタにアクセスできるサブネットを構成します。サブネットは、移行元クラスタのサブネットと同じ VPC ネットワークに存在する必要があります。
- [プロジェクト] で、該当するプロジェクトを選択します。
- [ネットワーク] で、移行元クラスタのサブネットと同じ VPC ネットワークを選択します。
- [サブネット] でサブネットを選択します。
- [完了] をクリックします。
[作成] をクリックします。
クラスタの作成中は、クラスタの状態が Creating になります。クラスタの作成が完了すると、状態は Active になります。
gcloud
ターゲット Kafka クラスタを作成するには、managed-kafka clusters create コマンドを実行します。
gcloud managed-kafka clusters create TARGET_KAFKA_CLUSTER \
--location=TARGET_REGION \
--cpu=3 \
--memory=3GiB \
--subnets=projects/PROJECT_ID/regions/TARGET_REGION/subnetworks/TARGET_SUBNET \
--async
次のように置き換えます。
TARGET_KAFKA_CLUSTER: Kafka クラスタの名前TARGET_REGION: クラスタのロケーション。ソースクラスタが配置されているリージョンとは異なるリージョンを選択します。サポートされているロケーションについては、Managed Service for Apache Kafka のロケーションをご覧ください。
PROJECT_ID: プロジェクト IDTARGET_SUBNET: クラスタをデプロイするサブネット(例:default)ソース クラスタと同じ VPC 内のサブネットを選択します。
Connect クラスタを作成する
この手順では、Connect クラスタを作成します。通常、Connect クラスタの作成には 20 ~ 30 分かかります。
この手順を開始する前に、前の手順のターゲット Kafka クラスタが完全に作成されていることを確認してください。
コンソール
[Managed Service for Apache Kafka] > [Connect クラスタ] ページに移動します。
[ 作成] をクリックします。
[Connect クラスタ名] に文字列を入力します。
my-connect-cluster[プライマリ Kafka クラスタ] で、前の手順で作成したターゲット Kafka クラスタを選択します。(ソース Kafka クラスタは選択しないでください)。
[ロケーション]、[ネットワーク構成]、[ワーカー サブネット] では、デフォルト値を使用するか、特定の要件に合わせてカスタマイズできます。
Connect クラスタでソースクラスタの DNS ドメインを解決できるようにするには、次の操作を行います。
[解決可能な DNS ドメイン] を開きます。
[DNS ドメインを追加] をクリックします。
[Kafka クラスタ] リストで、移行元の Kafka クラスタを選択します。
[作成] をクリックします。
クラスタの作成中は、クラスタの状態が Creating になります。クラスタの作成が完了すると、状態は Active になります。
gcloud
Connect クラスタを作成するには、gcloud managed-kafka connect-clusters create コマンドを実行します。
gcloud managed-kafka connect-clusters create CONNECT_CLUSTER \
--location=TARGET_REGION \
--cpu=12 \
--memory=12GiB \
--primary-subnet=projects/PROJECT_ID/regions/TARGET_REGION/subnetworks/TARGET_SUBNET \
--kafka-cluster=TARGET_KAFKA_CLUSTER \
--dns-name=SOURCE_KAFKA_CLUSTER.SOURCE_REGION.managedkafka.PROJECT_ID.cloud.goog. \
--async
次のように置き換えます。
CONNECT_CLUSTER: Connect クラスタの名前TARGET_REGION: ターゲット Kafka クラスタを作成したリージョンPROJECT_ID: プロジェクト IDTARGET_SUBNET: ターゲット Kafka クラスタを作成したサブネットTARGET_KAFKA_CLUSTER: ターゲット Kafka クラスタの名前SOURCE_KAFKA_CLUSTER: ソース Kafka クラスタの名前SOURCE_REGION: ソース Kafka クラスタを作成したリージョン
このコマンドは非同期で実行され、オペレーション ID を返します。
Check operation [projects/PROJECT_ID/locations/TARGET_REGION/operations/OPERATION_ID] for status.
作成オペレーションの進行状況を追跡するには、gcloud managed-kafka operations describe コマンドを使用します。
gcloud managed-kafka operations describe OPERATION_ID \
--location=TARGET_REGION
詳細については、クラスタ作成オペレーションをモニタリングするをご覧ください。
MirrorMaker 2.0 Source コネクタを作成する
このステップでは、MirrorMaker 2.0 ソース コネクタを作成します。このコネクタは、ソース Kafka クラスタからターゲット Kafka クラスタにメッセージを複製します。
コンソール
[Managed Service for Apache Kafka] > [Connect クラスタ] ページに移動します。
Connect クラスタの名前をクリックします。
[コネクタを作成] をクリックします。
[コネクタ名] に文字列を入力します。例:
mm2-connector[コネクタ プラグイン] リストで、[
MirrorMaker 2.0 Source] を選択します。[ソース クラスタ] で、[Managed Service for Apache Kafka クラスタ] を選択します。
[Kafka クラスタ] リストで、ソースクラスタを選択します。
[カンマ区切りのトピック名またはトピックの正規表現] ボックスに、複製する Kafka トピックの名前を入力します。
[作成] をクリックします。
gcloud
gcloud managed-kafka clusters describeコマンドを実行して、移行元 Kafka クラスタのブートストラップ アドレスを取得します。gcloud managed-kafka clusters describe SOURCE_KAFKA_CLUSTER \ --location=SOURCE_REGION \ --project=PROJECT_ID \ --format="value(bootstrapAddress)"次のように置き換えます。
SOURCE_KAFKA_CLUSTER: ソース Kafka クラスタの名前SOURCE_REGION: ソースクラスタのリージョンPROJECT_ID: プロジェクト ID
前のコマンドを再度実行して、ターゲット Kafka クラスタのブートストラップ アドレスを取得します。
gcloud managed-kafka clusters describe TARGET_KAFKA_CLUSTER \ --location=TARGET_REGION \ --project=PROJECT_ID \ --format="value(bootstrapAddress)"次のように置き換えます。
TARGET_KAFKA_CLUSTER: ターゲット Kafka クラスタの名前TARGET_REGION: ターゲット クラスタのリージョン
MirrorMaker 2.0 ソースコネクタを作成するには、
gcloud managed-kafka connectors createコマンドを実行します。gcloud managed-kafka connectors create CONNECTOR_NAME \ --location=TARGET_REGION \ --connect-cluster=CONNECT_CLUSTER \ --configs=connector.class=org.apache.kafka.connect.mirror.MirrorSourceConnector,\ source.cluster.alias=source,\ source.cluster.bootstrap.servers=SOURCE_CLUSTER_BOOTSTRAP_ADDRESS,\ target.cluster.alias=target,\ target.cluster.bootstrap.servers=TARGET_CLUSTER_BOOTSTRAP_ADDRESS,\ tasks.max=3,\ topics=TOPIC_NAME次のように置き換えます。
CONNECTOR_NAME: コネクタの名前(mm2-connectorなど)CONNECT_CLUSTER: Connect クラスタの名前SOURCE_CLUSTER_BOOTSTRAP_ADDRESS: 手順 1 で取得した移行元クラスタのブートストラップ アドレス。TARGET_CLUSTER_BOOTSTRAP_ADDRESS: 手順 2 で取得したターゲット クラスタのブートストラップ アドレス。TOPIC_NAME: レプリケートするトピックの名前。このパラメータでは、トピック名のカンマ区切りのリストまたは正規表現を指定することもできます。
MirrorMaker 2.0 ソースコネクタは、ターゲット クラスタに "source.TOPIC_NAME" という名前の新しいトピックを作成します。ここで、TOPIC_NAME はソース クラスタのトピックの名前です。
結果を表示
メッセージが複製されていることを確認するには、Kafka コマンドライン ツールを使用します。Kafka CLI の設定については、ドキュメントの CLI を使用してメッセージを生成して使用するのクライアント マシンを設定するをご覧ください。
たとえば、ソースクラスタにメッセージを送信するには、コマンドラインで次のコマンドを入力します。
export BOOTSTRAP=$(gcloud managed-kafka clusters describe SOURCE_KAFKA_CLUSTER \
--location=SOURCE_REGION \
--project=PROJECT_ID \
--format="value(bootstrapAddress)"
)
for msg in {1..10}; do
echo "message $msg"
done | kafka-console-producer.sh --topic TOPIC_NAME \
--bootstrap-server $BOOTSTRAP --producer.config client.properties
ターゲット クラスタから重複したメッセージを読み取るには、コマンドラインで次のコマンドを入力します。
export BOOTSTRAP=$(gcloud managed-kafka clusters describe TARGET_KAFKA_CLUSTER \
--location=TARGET_REGION \
--project=PROJECT_ID \
--format="value(bootstrapAddress)"
)
kafka-console-consumer.sh --topic source.TOPIC_NAME --from-beginning \
--bootstrap-server $BOOTSTRAP --consumer.config client.properties
出力は次のようになります。
message 1
message 2
message 3
message 4
[...]
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
コンソール
Connect クラスタを削除します。
[Managed Service for Apache Kafka] > [Connect クラスタ] ページに移動します。
Connect クラスタを選択し、[削除] をクリックします。
移行元の Kafka クラスタを削除します。
[Managed Service for Apache Kafka] > [クラスタ] ページに移動します。
Kafka クラスタを選択して、[削除] をクリックします。
前の手順を繰り返して、ターゲット Kafka クラスタを削除します。
gcloud
Connect クラスタを削除するには、
gcloud managed-kafka connect-clusters deleteコマンドを使用します。gcloud managed-kafka connect-clusters delete CONNECT_CLUSTER \ --location=TARGET_REGION --asyncソース Kafka クラスタを削除するには、
gcloud managed-kafka clusters deleteコマンドを使用します。gcloud managed-kafka clusters delete SOURCE_KAFKA_CLUSTER \ --location=SOURCE_REGION --async前の手順を繰り返して、ターゲット Kafka クラスタを削除します。
gcloud managed-kafka clusters delete TARGET_KAFKA_CLUSTER \ --location=TARGET_REGION --async
次のステップ
- MirrorMaker 2.0 コネクタのトラブルシューティング
- MirrorMaker 2.0 コネクタの詳細を確認する。
- Kafka Connect の詳細を確認する。