使用 MirrorMaker 2.0 複製 Kafka 主題

本教學課程說明如何使用 MirrorMaker 2.0 來源連接器,在 Managed Service for Apache Kafka 叢集之間複製資料。

叢集可以位於相同或不同專案,也可以位於相同或不同區域。在本教學課程中,您會在相同專案內設定跨區域的複寫功能。不過,其他組合的步驟相同。

架構

在此情境中,有三個叢集:

  • 要複製資料的 Kafka 叢集。這個叢集稱為「來源叢集」,因為這是資料來源。

  • 要寫入複製資料的 Kafka 叢集。這個叢集稱為「目標叢集」

  • Connect 叢集,可供您建立及管理 MirrorMaker 2.0 來源連接器。

Connect 叢集具有「主要」Kafka 叢集,也就是與 Connect 叢集相關聯的 Kafka 叢集。為盡量減少寫入作業的延遲時間,建議您將目標叢集指定為主要叢集,並將 Connect 叢集放在與目標叢集相同的區域。

下圖顯示這些元件:

Kafka 資料複製情境的架構

資料複製作業是由 MirrorMaker 2.0 來源連接器執行。這個情境也可以選擇使用另外兩個 MirrorMaker 2.0 連接器:

  • MirrorMaker 2.0 查核點連接器:確保目標叢集上的消費者可以從與來源叢集相同的點繼續處理,實現無縫容錯移轉。

  • MirrorMaker 2.0 活動訊號連接器:在來源 Kafka 叢集上定期產生活動訊號訊息,方便您監控資料複製作業的健全度和狀態。

本教學課程不會使用這些選用連接器。詳情請參閱「何時使用 MirrorMaker 2.0」。

事前準備

控制台

  1. 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Managed Kafka API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Managed Kafka API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. 請確認您在專案中具備下列一或多個角色: 代管 Kafka 叢集編輯者代管 Kafka Connect 叢集編輯者代管 Kafka 連接器編輯者

    檢查角色

    1. 前往 Google Cloud 控制台的「IAM」頁面。

      前往「IAM」頁面
    2. 選取專案。
    3. 在「主體」欄中,找出所有識別您或您所屬群組的資料列。如要瞭解自己所屬的群組,請與管理員聯絡。

    4. 針對指定或包含您的所有列,請檢查「角色」欄,確認角色清單是否包含必要角色。

    授予角色

    1. 前往 Google Cloud 控制台的「IAM」頁面。

      前往「IAM」頁面
    2. 選取專案。
    3. 按一下「Grant access」(授予存取權)
    4. 在「New principals」(新增主體) 欄位中,輸入您的使用者 ID。 這通常是指 Google 帳戶的電子郵件地址。

    5. 按一下「選取角色」,然後搜尋角色。
    6. 如要授予其他角色,請按一下「Add another role」(新增其他角色),然後新增其他角色。
    7. 按一下「Save」(儲存)

gcloud

  1. 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
  2. 安裝 Google Cloud CLI。

  3. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  4. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  5. 建立或選取 Google Cloud 專案

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
    • 建立專案:如要建立專案,您需要「專案建立者」角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替換為您要建立的 Google Cloud 專案名稱。

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替換為 Google Cloud 專案名稱。

  6. 確認專案已啟用計費功能 Google Cloud

  7. 啟用 Managed Kafka API:

    啟用 API 時所需的角色

    如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

    gcloud services enable managedkafka.googleapis.com
  8. 安裝 Google Cloud CLI。

  9. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  10. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  11. 建立或選取 Google Cloud 專案

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
    • 建立專案:如要建立專案,您需要「專案建立者」角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替換為您要建立的 Google Cloud 專案名稱。

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替換為 Google Cloud 專案名稱。

  12. 確認專案已啟用計費功能 Google Cloud

  13. 啟用 Managed Kafka API:

    啟用 API 時所需的角色

    如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

    gcloud services enable managedkafka.googleapis.com
  14. 將角色授予使用者帳戶。針對下列每個 IAM 角色,執行一次下列指令: roles/managedkafka.clusterEditor, roles/managedkafka.connectClusterEditor, roles/managedkafka.connectorEditor

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    更改下列內容:

    • PROJECT_ID:專案 ID。
    • USER_IDENTIFIER:使用者帳戶的 ID。 例如:myemail@example.com
    • ROLE:授予使用者帳戶的 IAM 角色。

建立來源 Kafka 叢集

在這個步驟中,您會建立 Managed Service for Apache Kafka 叢集。這個叢集是來源叢集,內含要複製的資料。

控制台

  1. 前往「Managed Service for Apache Kafka」>「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集)

  2. 點選 「Create」(建立)

  3. 在「Cluster name」(叢集名稱) 方塊中輸入叢集的名稱。

  4. 在「Region」(區域) 清單中,選取叢集的位置。

  5. 在「網路設定」部分,設定可存取叢集的子網路。

    1. 在「Project」(專案) 部分,選取專案。
    2. 在「Network」中,選取專案中的虛擬私有雲網路。
    3. 在「Subnet」(子網路) 中,選取子網路。
    4. 按一下 [完成]
  6. 點選「建立」

叢集建立期間,叢集狀態為 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:專案 ID

  • SOURCE_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 主題

來源叢集準備就緒後,請按照下列步驟建立主題:

控制台

  1. 前往「Managed Service for Apache Kafka」>「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集)

  2. 按一下叢集名稱。

  3. 在叢集詳細資料頁面中,按一下 「Create Topic」(建立主題)

  4. 在「Topic name」(主題名稱) 方塊中,輸入主題名稱。

  5. 點選「建立」

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 叢集

在這個步驟中,您會建立第二個 Managed Service for Apache Kafka 叢集。這個叢集是目標叢集,MirrorMaker 2.0 會將資料複製到這個叢集。

控制台

  1. 前往「Managed Service for Apache Kafka」>「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集)

  2. 點選 「Create」(建立)

  3. 在「Cluster name」(叢集名稱) 方塊中輸入叢集的名稱。

  4. 在「Region」(區域) 清單中,選取叢集的位置。選擇與來源叢集所在區域不同的區域。

  5. 在「網路設定」中,設定可存取目標叢集的子網路。子網路必須與來源叢集的子網路位於相同的 VPC 網路。

    1. 在「Project」(專案) 部分,選取專案。
    2. 在「Network」(網路) 中,選取與來源叢集子網路相同的虛擬私有雲網路。
    3. 在「Subnet」(子網路) 中,選取子網路。
    4. 按一下 [完成]
  6. 點選「建立」

叢集建立期間,叢集狀態為 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:專案 ID

  • TARGET_SUBNET:要部署叢集的子網路,例如 default

    選取與來源叢集位於相同虛擬私有雲的子網路。

建立連結叢集

在這個步驟中,您會建立 Connect 叢集。建立 Kafka Connect 叢集通常需要 20 到 30 分鐘。

開始這個步驟前,請確認上一步中的目標 Kafka 叢集已完全建立。

控制台

  1. 前往「Managed Service for Apache Kafka」>「Connect Clusters」(連線叢集) 頁面。

    前往「Connect Clusters」(連結叢集)

  2. 點選 「Create」(建立)

  3. 在「Connect cluster name」(Connect 叢集名稱) 中輸入字串。例如:my-connect-cluster

  4. 在「Primary Kafka cluster」(主要 Kafka 叢集) 中,選取您在上一個步驟中建立的目標 Kafka 叢集。(請勿選取來源 Kafka 叢集)。

  5. 「位置」、「網路設定」和「工作站子網路」可使用預設值,也可以根據特定需求自訂。

  6. 如要讓 Connect 叢集解析來源叢集的 DNS 網域,請執行下列步驟:

    1. 展開「可解析的 DNS 網域」

    2. 按一下「新增 DNS 網域」

    3. 在「Kafka cluster」(Kafka 叢集) 清單中,選取來源 Kafka 叢集。

  7. 點選「建立」

叢集建立期間,叢集狀態為 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:專案 ID
  • TARGET_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 來源連接器

在這個步驟中,您會建立 MirrorMaker 2.0 來源連接器。這個連接器會將來源 Kafka 叢集的訊息,複製到目標 Kafka 叢集。

控制台

  1. 前往「Managed Service for Apache Kafka」>「Connect Clusters」(連線叢集) 頁面。

    前往「Connect Clusters」(連結叢集)

  2. 按一下 Connect 叢集名稱。

  3. 按一下 「建立連接器」

  4. 在「Connector name」(連接器名稱) 中輸入字串。範例:mm2-connector

  5. 在「連接器外掛程式」清單中,選取「MirrorMaker 2.0 Source」。

  6. 選取「將主要 Kafka 叢集設為目標叢集」

  7. 在「來源叢集」中,選取「Managed Service for Apache Kafka 叢集」

  8. 在「Kafka cluster」(Kafka 叢集) 清單中,選取來源叢集。

  9. 在「Comma-separated topic names or topic regex」(以半形逗號分隔的主題名稱或主題規則運算式) 方塊中,輸入要複製的 Kafka 主題名稱。

  10. 點選「建立」

gcloud

如要建立 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=bootstrap.SOURCE_KAFKA_CLUSTER.SOURCE_REGION.managedkafka.PROJECT_ID.cloud.goog:9092,\
target.cluster.alias=target,\
target.cluster.bootstrap.servers=bootstrap.TARGET_KAFKA_CLUSTER.TARGET_REGION.managedkafka.PROJECT_ID.cloud.goog:9092,\
tasks.max=3,\
topics=TOPIC_NAME

更改下列內容:

  • CONNECTOR_NAME:連接器名稱,例如 mm2-connector
  • TARGET_REGION:建立 Connect 叢集和目標 Kafka 叢集的區域
  • CONNECT_CLUSTER:Connect 叢集名稱
  • SOURCE_KAFKA_CLUSTER:來源 Kafka 叢集的名稱
  • SOURCE_REGION:您建立來源 Kafka 叢集的區域
  • PROJECT_ID:專案 ID
  • TARGET_KAFKA_CLUSTER:目標 Kafka 叢集的名稱
  • TOPIC_NAME:要複製的主題名稱。這個參數也可以指定逗號分隔的主題名稱清單,或規則運算式。

MirrorMaker 2.0 來源連接器會在目標叢集中建立名為 "source.TOPIC_NAME" 的新主題,其中 TOPIC_NAME 是來源叢集中的主題名稱。

查看結果

如要確認訊息是否正在複製,可以使用 Kafka 指令列工具。如要瞭解如何設定 Kafka CLI,請參閱「使用 CLI 發布及接收訊息」中的「設定用戶端機器」。

舉例來說,如要將訊息傳送至來源叢集,請在指令列中輸入下列內容:

export BOOTSTRAP=bootstrap.SOURCE_KAFKA_CLUSTER.SOURCE_REGION.managedkafka.PROJECT_ID.cloud.goog:9092

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=bootstrap.TARGET_KAFKA_CLUSTER.TARGET_REGION.managedkafka.PROJECT_ID.cloud.goog:9092

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 帳戶收取費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。

控制台

  1. 刪除 Connect 叢集。

    1. 前往「Managed Service for Apache Kafka」>「Connect Clusters」(連線叢集) 頁面。

      前往「Connect Clusters」(連結叢集)

    2. 選取 Connect 叢集,然後按一下「刪除」

  2. 刪除來源 Kafka 叢集。

    1. 前往「Managed Service for Apache Kafka」>「Clusters」(叢集) 頁面。

      前往「Clusters」(叢集)

    2. 選取 Kafka 叢集,然後按一下「Delete」(刪除)

  3. 重複上一個步驟,刪除目標 Kafka 叢集。

gcloud

  1. 如要刪除 Connect 叢集,請使用 gcloud managed-kafka connect-clusters delete 指令。

    gcloud managed-kafka connect-clusters delete CONNECT_CLUSTER \
      --location=TARGET_REGION --async
    
  2. 如要刪除來源 Kafka 叢集,請使用 gcloud managed-kafka clusters delete 指令。

    gcloud managed-kafka clusters delete SOURCE_KAFKA_CLUSTER \
      --location=SOURCE_REGION --async
    
  3. 重複上一個步驟,刪除目標 Kafka 叢集。

    gcloud managed-kafka clusters delete TARGET_KAFKA_CLUSTER \
      --location=TARGET_REGION --async
    

後續步驟