MirrorMaker 2.0 查核點連接器會將某個 Kafka 叢集的消費者偏移量,複製到另一個 Kafka 叢集。Kafka 取用端會使用取用端偏移量,記錄分區中最後一則成功取用的訊息。複製偏移量可讓消費者切換至目標叢集,並從相同位置繼續處理。
這個連接器可用於:
確保從來源叢集切換至目標叢集時,停機時間降至最低。
在叢集之間提供一致的消費者狀態,實現順暢的容錯移轉。
將資料移至目標叢集時,保留消費者進度。
Checkpoint 連接器的運作方式
查核點連接器會與 MirrorMaker 2.0 來源連接器搭配使用。Checkpoint 連接器會按照下列方式複製偏移:
針對每個複製的分區,MirrorMaker 2.0 來源連接器會將複製的記錄寫入目標叢集。
寫入目標叢集的記錄通常與對應的來源記錄有不同的偏移量。如要啟用從來源偏移量到目標偏移量的翻譯,MirrorMaker 2.0 來源連接器會將偏移量組合寫入來源叢集上名為
mm2-offset-syncs.target.internal的主題。這些偏移量組合會將來源偏移量對應至相應的目標偏移量。取用端會從來源叢集讀取記錄。為了記錄進度,消費者會定期提交每個分區最新處理的訊息。Kafka 會將已提交的偏移量 (也稱為「檢查點」) 儲存在名為
__consumer_offsets的主題中。檢查點記錄包含消費者的消費者群組 ID。MirrorMaker 2.0 查核點連接器會將查核點記錄複製到目標叢集中名為
source.checkpoints.internal的主題。如果為
sync.group.offsets.enabled=true,查核點連接器會定期將查核點從source.checkpoints.internal複製到目標叢集上的__consumer_offsets。這樣一來,消費者就能在容錯移轉後,從最新提交的偏移量重新啟動。如要繼續處理,消費者會在容錯移轉後使用相同的消費者群組 ID。sync.group.offsets.interval.seconds設定可控管連接器將檢查點複製到__consumer_offsets的頻率。
建立 MirrorMaker 2.0 查核點連接器
控制台
前往 Google Cloud 控制台的「Connect Clusters」(連結叢集) 頁面。
按一下要建立連接器的 Connect 叢集。
「Connect cluster details」(連結叢集詳細資料) 頁面隨即顯示。
按一下「Create Connector」(建立連接器)。
在「Connector name」(連接器名稱) 欄位中,輸入連接器名稱。
在「Connector plugin」(連接器外掛程式) 清單中,選取「MirrorMaker 2.0 Checkpoint」。
在「來源叢集」部分,選取下列任一選項:
- Managed Service for Apache Kafka 叢集:在「Kafka cluster」(Kafka 叢集) 清單中,選取 Managed Service for Apache Kafka 叢集。
- 自行管理或外部 Kafka 叢集:在「Cluster bootstrap server」(叢集啟動伺服器) 欄位中,輸入 Kafka 叢集的啟動位址,格式為
HOSTNAME:PORT_NUMBER。
選用:在「Configurations」(設定) 方塊中,新增設定屬性或編輯預設屬性。詳情請參閱「設定連接器」。
在「Group names or Group regex」(群組名稱或群組規則運算式) 欄位中,輸入要複製的消費者群組清單 (以半形逗號分隔)。群組名稱可使用規則運算式。
選取「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.MirrorCheckpointConnector"
emit.checkpoints.interval.seconds: "CHECKPOINT_INTERVAL"
groups: "CONSUMER_GROUP_LIST"
groups.exclude: "console-consumer-.*,connect-.*,__.*"
source.cluster.alias: "source"
source.cluster.bootstrap.servers: "SOURCE_CLUSTER_BOOTSTRAP_ADDRESS"
sync.group.offsets.enabled: "true"
sync.group.offsets.interval.seconds: "OFFSETS_SYNC_INTERVAL"
target.cluster.alias: "target"
target.cluster.bootstrap.servers: "TARGET_CLUSTER_BOOTSTRAP_ADDRESS"
tasks.max: "3"
更改下列內容:
CHECKPOINT_INTERVAL:寫入檢查點的頻率,以秒為單位。CONSUMER_GROUP_LIST:以半形逗號分隔的消費者群組清單,這些群組的偏移量會複製。清單可以包含規則運算式。SOURCE_CLUSTER_BOOTSTRAP_ADDRESS:來源 Kafka 叢集的啟動位址。OFFSETS_SYNC_INTERVAL:將檢查點複製到__consumer_offsets主題的頻率,以秒為單位。詳情請參閱「檢查點同步」。TARGET_CLUSTER_BOOTSTRAP_ADDRESS:目標 Kafka 叢集的啟動位址。
設定連接器
本節說明您可以在連接器上設定的部分設定屬性。
如需這個連接器專屬屬性的完整清單,請參閱 Apache Kafka 說明文件中的「MirrorMaker 查核點設定」。
複製的用戶群組
如要指定要複製的使用者群組,請設定 groups 設定屬性。您可以指定個別名稱或使用規則運算式。例如:"group1,group2,customer-*"。預設值為 .*。
如要從複製作業中排除消費者群組,請設定 groups.exclude 屬性。
查核點同步
下列設定可控管連接器將檢查點寫入目標叢集的方式。
sync.group.offsets.enabled:是否要將偏移量從source.checkpoints.internal複製到目標叢集上的__consumer_offsets。預設值為false。如要讓目標叢集的消費者在容錯移轉後順暢重新啟動,請將這項屬性設為true。emit.checkpoints.interval.seconds:將檢查點寫入內部檢查點主題的頻率。預設值為 60 秒。設定這項屬性時,請考量追蹤進度與盡量減少寫入檢查點的負擔之間的平衡。10 秒是合理的值。sync.group.offsets.interval.seconds:將檢查點從內部檢查點主題複製到__consumer_offsets的頻率。預設值為 60 秒。只有在sync.group.offsets.enabled為true時,這項設定才會生效。