MirrorMaker 2.0 來源連接器可將某個 Kafka 叢集 (來源) 的主題和資料,複製到另一個 Kafka 叢集 (目標)。
這個連接器的常見用途包括:
資料遷移將 Kafka 工作負載遷移至新的 Managed Service for Apache Kafka 叢集。
災難復原。建立備份叢集,確保發生故障時業務不中斷。
資料匯總。將多個 Kafka 叢集的資料整合至中央 Managed Service for Apache Kafka 叢集,以便執行分析。
這個連接器會在 Kafka 叢集之間執行基本資料複製作業。為確保災難復原機制更完善,請搭配使用下列連接器與 MirrorMaker 2.0 來源連接器:
MirrorMaker 2.0 查核點連接器。複製消費者偏移,讓消費者可以容錯移轉至目標叢集,而不會遺失資料。
MirrorMaker 2.0 活動訊號連接器。產生週期性活動訊號訊息,讓您監控連線能力和複製延遲時間。
瞭解 MirrorMaker 2.0 中的叢集角色
MirrorMaker 2.0 連接器會從「來源」Kafka 叢集讀取資料,並寫入「目標」Kafka 叢集。在 Managed Service for Apache Kafka 中,Connect 叢集的主要叢集必須是目標叢集。這項設定可盡量縮短寫入作業的延遲時間。來源叢集可以是另一個 Managed Service for Apache Kafka 叢集,也可以是外部或自行管理的 Kafka 叢集。
如要將資料從 Managed Service for Apache Kafka 叢集複製到外部或自行管理的叢集,建議您在其他叢集所在的相同位置或區域執行 Kafka Connect,並使用 MirrorMaker 2.0 從 Managed Service for Apache Kafka 擷取資料。
您必須正確設定連接器的所有屬性。其中也包含指向次要叢集的生產端驗證屬性。如要進一步瞭解潛在問題,請參閱「改善 MirrorMaker 2.0 用戶端設定」。
必要角色和權限
如要取得建立連接器所需的權限,請要求管理員授予您專案的代管 Kafka 連接器編輯者 (roles/managedkafka.connectorEditor) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這個預先定義的角色具備建立連接器所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
您必須具備下列權限,才能建立連接器:
-
建立連接器:
managedkafka.connectors.create
設定網路
本節說明 MirrorMaker 2.0 連線至次要 Kafka 叢集的網路需求。一般規定如下:
連線能力:Connect 叢集 worker 必須能連線至次要 Kafka 叢集。
DNS 解析。您必須將次要叢集的 DNS 網域新增至 Connect 叢集的可解析 DNS 網域。此外,DNS 網域必須可從 Connect 叢集的子網路解析,例如建立 Cloud DNS 區域。
防火牆規則。防火牆規則必須允許 Connect 叢集 worker 連線至來源和目標 Kafka 叢集。
許多細節取決於次要 Kafka 叢集的託管方式和位置,無論是 Managed Service for Apache Kafka 叢集、 Google Cloud中的自行管理叢集,還是外部叢集。
Managed Service for Apache Kafka 叢集
- 如果次要叢集位於不同的虛擬私有雲網路,請將 Connect 叢集虛擬私有雲網路中的子網路,新增至次要叢集的連線子網路。詳情請參閱「網路設定」。
自行管理的 Kafka 叢集 (位於 Google Cloud)
如果次要叢集位於不同的虛擬私有雲網路,連線選項包括虛擬私有雲網路對接、Network Connectivity Center (NCC) 和 Cloud VPN。
如果次要叢集位於不同的虛擬私有雲網路,請建立 Cloud DNS 對接區域,與次要叢集的虛擬私有雲網路對接,並在 Connect 叢集的子網路中顯示。
外部 Kafka 叢集
連線至外部叢集的選項包括:
Cloud VPN:符合成本效益的解決方案,適合頻寬較低的情況。它會在公開網際網路上建立已加密的通道。
Cloud Interconnect:在地端部署網路與 Google Cloud之間提供專屬的高頻寬連線。您可以選擇 Dedicated Interconnect 建立直接實體連線,或透過 Partner Interconnect 經由服務供應商連線。
設定 Cloud NAT,允許 Connect worker 存取網際網路。
在 Connect 叢集的虛擬私有雲網路中建立 Cloud DNS 轉送區域,為外部叢集的 bootstrap 位址和代理端點解析 DNS 查詢。
設定驗證機制
如果來源或目標 Kafka 叢集是 Managed Service for Apache Kafka 叢集,連接器會自動設定為使用 OAuthBearer 驗證。您不需要進行任何其他設定。
如果是自行管理或外部 Kafka 叢集,則必須設定驗證和 TLS 加密。設定取決於 Kafka 叢集支援的驗證機制。詳情請參閱 Apache Kafka 說明文件中的「MirrorMaker 一般設定」。
如果叢集支援 OAuthBearer 驗證,請使用下列設定:
source.cluster.security.protocol=SASL_SSL
source.cluster.sasl.mechanism=OAUTHBEARER
source.cluster.sasl.login.callback.handler.class=com.google.cloud.hosted.kafka.auth.GcpLoginCallbackHandler
source.cluster.sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;
將必要憑證儲存在 Secret Manager,詳情請參閱下一節。
使用 Secret Manager 儲存憑證
連線至自行管理或外部 Kafka 叢集時,請使用 Secret Manager 儲存驗證所需的機密設定值。這類資訊可能包括密碼、金鑰存放區檔案和信任存放區檔案,具體取決於叢集的驗證設定。
如要進一步瞭解如何將 Secret Manager 密鑰與 Connect 叢集建立關聯,請參閱「Secret Manager 資源」。
在連接器設定中,請按照下列方式參照密鑰:
檔案路徑請使用
/var/secrets/PROJECT_NAME-SECRET_NAME-SECRET_VERSION格式。範例:ssl.truststore.location=/var/secrets/project1-truststore-1。密碼請使用
${directory:/var/secrets:PROJECT_NAME-SECRET_NAME-SECRET_VERSION}格式。例如:password=${directory:/var/secrets:project1-database_password-3}。
更改下列內容:
- PROJECT_NAME: Google Cloud 專案的名稱。
- SECRET_NAME:Secret 的名稱。
- SECRET_VERSION:Secret 版本。
MirrorMaker 來源連接器的運作方式
MirrorMaker 來源連接器會從來源叢集的一或多個 Kafka 主題提取資料,並將該資料和 ACL 複製到目標叢集的主題。
以下詳細說明 MirrorMaker 來源連接器如何複製資料:
連接器會從來源叢集中的指定 Kafka 主題擷取訊息,使用
topics設定屬性指定要複製的主題,該屬性接受以半形逗號分隔的主題名稱或單一 Java 樣式規則運算式。例如:topic-a,topic-b或my-prefix-.*。連接器也可以略過複製您使用
topics.exclude屬性指定的特定主題;排除項目會覆寫包含項目。連接器會將取用的訊息寫入目標叢集。
連接器需要來源和目標叢集連線詳細資料,例如
source.cluster.bootstrap.servers和target.cluster.bootstrap.servers。連接器也需要
source.cluster.alias和target.cluster.alias指定的來源和目標叢集別名。根據預設,系統會使用來源別名自動重新命名複製的主題。舉例來說,如果來源主題名為orders,別名為primary,則在目標中會變成primary.orders。如要在目標叢集中保留原始主題名稱,不加上前置字串,請將replication.policy.class設為org.apache.kafka.connect.mirror.IdentityReplicationPolicy。與複製主題相關聯的 ACL 也會從來源叢集同步至目標叢集。您可以使用
sync.topic.acls.enabled屬性停用這項功能。如果叢集需要,您必須在設定中提供連線至來源和目標叢集的驗證詳細資料。您必須設定
security.protocol、sasl.mechanism和sasl.jaas.config等屬性,並在來源和目標屬性前分別加上source.cluster.和target.cluster.。連接器會依賴內部主題。您可能需要設定與這些相關的屬性,例如
offset-syncs.topic.replication.factor。連接器會使用 Kafka 記錄轉換器
key.converter、value.converter和header.converter。如果是直接複製,這些通常會預設為org.apache.kafka.connect.converters.ByteArrayConverter,不會執行任何轉換 (直通)。tasks.max屬性可控制連接器的平行處理層級。增加tasks.max可能會提高處理量,但有效平行處理作業通常會受限於要複製的來源 Kafka 主題分區數量。
MirrorMaker 2.0 連接器的屬性
建立或更新 MirrorMaker 2.0 連接器時,請指定下列屬性:
連接器名稱
連接器的名稱或 ID。如要瞭解資源命名準則,請參閱「Managed Service for Apache Kafka 資源命名指南」。名稱無法變更。
連接器類型
連接器類型必須是下列其中一項:
來源叢集
MirrorMaker 2.0 連接器讀取來源 Kafka 叢集。
Managed Service for Apache Kafka 叢集:從下拉式選單中選取叢集。
自行管理或外部 Kafka 叢集:請按照
hostname:port_number格式輸入啟動位址。例如:kafka-test:9092。
主題名稱或規則運算式
要複製的主題。指定個別名稱 (topic1、topic2) 或使用規則運算式 (topic.*)。MirrorMaker 2.0 來源連接器必須提供這項屬性。預設值為 .*
用戶群組名稱或規則運算式
要複製的消費者群組。指定個別名稱 (group1、group2) 或使用規則運算式 (group.*)。MirrorMaker 2.0 Checkpoint 連接器必須提供這項屬性。預設值為 .*
設定
您可以在這個部分,為 MirrorMaker 2.0 連接器指定其他連接器專屬設定屬性。
Kafka 主題中的資料可能採用 Avro、JSON 或原始位元組等各種格式,因此設定的重要環節之一是指定轉換器。轉換器會將 Kafka 主題使用的資料格式,轉換為 Kafka Connect 的標準化內部格式。
如要進一步瞭解 Kafka Connect 中轉換器的角色、支援的轉換器類型,以及常見的設定選項,請參閱「轉換器」。
所有 MirrorMaker 2.0 連接器的一些常見設定包括:
source.cluster.alias:來源叢集的別名。target.cluster.alias:目標叢集的別名。replication.policy.class:政策類別,用於指定複製主題在目標叢集中的命名方式。預設值為org.apache.kafka.connect.mirror.DefaultReplicationPolicy,會將來源叢集別名做為複製主題名稱的前置字串。如果來源叢集別名為primary,則名為orders的主題會複製到目標叢集中的primary.orders。如要保留不含前置字串的原始主題名稱,請將這個屬性設為org.apache.kafka.connect.mirror.IdentityReplicationPolicy。
複製資料時,用來排除特定資源的設定:
topics.exclude:已排除的主題。支援以半形逗號分隔的主題名稱和規則運算式。排除條件的優先順序高於納入條件。 用於 MirrorMaker 2.0 來源連接器。預設值為mm2.*.internal,.*.replica,__.*groups.exclude:排除群組。支援以半形逗號分隔的群組 ID 和規則運算式。排除條件的優先順序高於納入條件。 用於 MirrorMaker 2.0 查核點連接器。預設值為console-consumer-.*,connect-.*,__.*
可用的設定屬性取決於特定連接器。請查看支援的 MirrorMaker 2.0 連接器版本,瞭解支援哪些設定範例。請參閱下列文件:
Kafka 記錄轉換
Kafka Connect 預設會使用 org.apache.kafka.connect.converters.ByteArrayConverter 做為鍵和值的轉換器,並提供不進行轉換的直通選項。
您可以設定 header.converter、key.converter 和 value.converter,以使用其他轉換器。
任務數量
tasks.max 值會設定 Kafka Connect 用來執行 MirrorMaker 連接器的任務數量上限。這項設定可控制連接器的平行處理級別。增加工作數量可能會提高處理量,但會受 Kafka 主題分區數量等因素限制。
建立 MirrorMaker 2.0 來源連接器
建立連接器前,請先參閱連接器屬性說明文件。
控制台
前往 Google Cloud 控制台的「Connect Clusters」(連結叢集) 頁面。
按一下要建立連接器的 Connect 叢集。
「Connect cluster details」(連結叢集詳細資料) 頁面隨即顯示。
按一下「Create Connector」(建立連接器)。
「Create Kafka Connector」(建立 Kafka 連接器) 頁面隨即顯示。
在「Connector name」(連接器名稱) 中輸入字串。
如要進一步瞭解如何命名連接器,請參閱「Managed Service for Apache Kafka 資源命名指南」。
在「Connector plugin」(連接器外掛程式) 部分,選取「MirrorMaker 2.0 Source」。
在「Source cluster」(來源叢集) 部分,選擇下列其中一個選項:
- 「Managed Service for Apache Kafka Cluster」(Managed Service for Apache Kafka 叢集):從選單中選取。
- 自行管理或外部 Kafka 叢集:請按照
hostname:port_number格式輸入啟動程序位址。
輸入主題的名稱或規則運算式 (以半形逗號分隔)。
查看並調整「Configurations」(設定),包括必要的安全性設定。
如要進一步瞭解設定和驗證,請參閱「設定」。
選取「Task restart policy」(任務重新啟動政策)。詳情請參閱「工作重新啟動政策」。
點選「建立」。
gcloud
執行 gcloud
managed-kafka connectors create 指令:
gcloud managed-kafka connectors create CONNECTOR_ID \
--connect-cluster=CONNECT_CLUSTER_ID \
--location=LOCATION \
--config-file=CONFIG_FILE
更改下列內容:
CONNECTOR_ID:連接器的 ID 或名稱。CONNECT_CLUSTER_ID:建立連接器 的 Connect 叢集 ID。LOCATION:Connect 叢集的位置。CONFIG_FILE:本機 YAML 或 JSON 設定檔的路徑。
以下是 MirrorMaker 2.0 來源連接器的設定檔範例:
connector.class: "org.apache.kafka.connect.mirror.MirrorSourceConnector"
source.cluster.alias: "source"
target.cluster.alias: "target"
topics: "TOPIC_LIST"
source.cluster.bootstrap.servers: "SOURCE_CLUSTER_BOOTSTRAP_ADDRESS"
target.cluster.bootstrap.servers: "TARGET_CLUSTER_BOOTSTRAP_ADDRESS"
更改下列內容:
TOPIC_LIST:以半形逗號分隔的 Kafka 主題清單,用於指定要複製的主題。清單可包含規則運算式。SOURCE_CLUSTER_BOOTSTRAP_ADDRESS:來源 Kafka 叢集的啟動位址。TARGET_CLUSTER_BOOTSTRAP_ADDRESS:目標 Kafka 叢集的啟動位址。
如果來源叢集是自行管理的 Kafka 叢集,您可能需要加入其他屬性來設定驗證。詳情請參閱「設定驗證」。
Terraform
您可以使用 Terraform 資源建立連接器。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
Go
在試用這個範例之前,請先按照「 安裝用戶端程式庫」中的 Go 設定操作說明進行操作。詳情請參閱 Managed Service for Apache Kafka Go API 參考文件。
如要向 Managed Service for Apache Kafka 進行驗證,請設定應用程式預設憑證(ADC)。詳情請參閱「為本機開發環境設定 ADC」。
Java
在試用這個範例之前,請先按照「 安裝用戶端程式庫」中的 Java 設定操作說明進行操作。詳情請參閱 Managed Service for Apache Kafka Java API 參考文件。
如要向 Managed Service for Apache Kafka 進行驗證,請設定應用程式預設憑證。詳情請參閱「 為本機開發環境設定 ADC」。
Python
試用這個範例前,請先按照「 安裝用戶端程式庫」中的 Python 設定操作說明進行。詳情請參閱 Managed Service for Apache Kafka Python API 參考文件。
如要向 Managed Service for Apache Kafka 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定 ADC」。