遷移至 Amazon MSK 叢集 - Amazon Managed Streaming for Apache Kafka

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

遷移至 Amazon MSK 叢集

Amazon MSK Replicator 可用於 MSK 叢集遷移。請參閱什麼是 Amazon MSK Replicator?。或者,您也可以使用 Apache MirrorMaker 2.0 從非 MSK 叢集遷移到 Amazon MSK 叢集。有關如何執行此操作的範例,請參閱使用將現場部署 Apache 卡夫卡叢集遷移到 Amazon MSK。 MirrorMaker如需如何使用的詳細資訊 MirrorMaker,請參閱 Apache Kafka 說明文件中的叢集之間鏡像資料。我們建議 MirrorMaker 在高可用性組態中進行設定。

使用移轉至 MSK 叢集時應 MirrorMaker 遵循的步驟大綱
  1. 建立目的地 MSK 叢集

  2. MirrorMaker 從與目標叢集相同的 Amazon VPC 內的 Amazon EC2 執行個體開始。

  3. 檢查 MirrorMaker 滯後。

  4. MirrorMaker 趕上之後,使用 MSK 叢集啟動程式代理程式將生產者和消費者重新導向至新叢集。

  5. 關閉 MirrorMaker。

將您的 Apache Kafka 叢集遷移到 Amazon MSK

假設你有一個名為 CLUSTER_ONPREM 的 Apache Kafka 叢集。該叢集會填入主題和資料。如果您想要將該叢集遷移到新建立且名為 CLUSTER_AWSMSK 的 Amazon MSK 叢集,此程序會提供您必須遵循之步驟的高階檢視。

將現有的 Apache Kafka 叢集遷移到 Amazon MSK
  1. 在中 CLUSTER_AWSMSK,建立您要遷移的所有主題。

    您無法用 MirrorMaker 於此步驟,因為它不會自動以正確的複寫層級重新建立您要移轉的主題。您可以在 Amazon MSK 中建立相同的主題,並具有與 CLUSTER_ONPREM 中相同的複寫係數和分區數量。您也可以建立具有不同複寫因素和分割區數目的主題。

  2. MirrorMaker 從具有讀取權限CLUSTER_ONPREM和寫入權限的執行個體開始CLUSTER_AWSMSK

  3. 執行下列命令以鏡像所有主題:

    <path-to-your-kafka-installation>/bin/kafka-mirror-maker.sh --consumer.config config/mirrormaker-consumer.properties --producer.config config/mirrormaker-producer.properties --whitelist '.*'

    在此命令中,config/mirrormaker-consumer.properties 指定 CLUSTER_ONPREM 中的引導代理程式;例如,bootstrap.servers=localhost:9092。並config/mirrormaker-producer.properties指向 CLUSTER_ 中的引導程序代理程序AWSMSK; 例如,. bootstrap.servers=10.0.0.237:9092,10.0.2.196:9092,10.0.1.233:9092

  4. 繼續在後台 MirrorMaker 運行,並繼續使用CLUSTER_ONPREM。 MirrorMaker 鏡像所有新資料。

  5. 檢查鏡像的進度,方法 MirrorMaker 是檢查每個主題的最後一個偏移與消耗的目前偏移之間的延遲。

    請記住,只 MirrorMaker 是使用消費者和生產者。所以,你可以使用 kafka-consumer-groups.sh 工具來檢查延遲。若要尋找取用者群組名稱,請在 mirrormaker-consumer.properties 檔案內尋找 group.id,然後使用該值。如果檔案中沒有這樣的金鑰,則你可以建立。例如,設定 group.id=mirrormaker-consumer-group

  6. MirrorMaker 完成鏡像所有主題後,停止所有生產者和消費者,然後停止 MirrorMaker。然後通過變更生產者和取用者引導代理程式的值,重定導向到 CLUSTER_AWSMSK 叢集。重新啟動 CLUSTER_AWSMSK 上的所有生產者和取用者。

從一個 Amazon MSK 叢集遷移至另一個叢集

您可以使用 Apache MirrorMaker 2.0 從非 MSK 叢集移轉至 MSK 叢集。例如,您可以從 Apache Kafka 的一個版本遷移到另一個版本。有關如何執行此操作的範例,請參閱使用將現場部署 Apache 卡夫卡叢集遷移到 Amazon MSK。 MirrorMakerAmazon MSK Replicator 也可用於 MSK 叢集遷移。如需有關 Amazon MSK Replicator 的詳細資訊,請參閱 MSK Replicator

MirrorMaker 1.0 最佳做法

此最佳做法清單適用於 MirrorMaker 1.0。

  • 在目 MirrorMaker 的地叢集上執行。如此一來,如果發生網路問題,訊息仍可在來源叢集中使用。如果您在來源叢集 MirrorMaker 上執行,且事件會在生產者中緩衝,而且發生網路問題,事件可能會遺失。

  • 如果傳輸過程中需要加密,請在來源叢集中執行。

  • 針對取用者,設定 auto.commit.enabled=false

  • 針對生產者,設定

    • max.in.flight.requests.per.connection=1

    • retries = 擷取最大值

    • acks = 全部

    • max.block.ms = Long.Max_Value

  • 針對高生產者輸送量:

    • 緩衝訊息和填充訊息批次 - 調校 buffer.memory、batch.size、linger.ms

    • 調校插槽緩衝區 - receive.buffer.bytes、send.buffer.bytes

  • 為了避免數據丟失,請關閉源代碼的 auto 提交, MirrorMaker 以便可以控制提交,這通常在從目標集群接收到 ack 之後執行。如果生產者具有 acks=all,且目的地叢集的 min.insync.replicas 設定為 1 以上,則在取用者在來源確認偏移量之前,訊息會保留在目的地的多個代理程式上。 MirrorMaker

  • 如果順序很重要,您可以將 retries 設定為 0。或者,對於生產環境,將最大傳輸中連線設定為 1,以確保在批次失敗時發出的批次會按順序遞交。如此一來,每個發送的批次都會重試,直到下一個批次發送出去。如果 max.block.ms 未設定為最大值,且生產者緩衝區已滿,則可能會有資料遺失 (取決於某些其他設定)。這可以阻止取用者和返回壓力。

  • 針對高輸送量

    • 增加緩衝區。記憶體。

    • 增加批次大小。

    • 調校 linger.ms 以允許批次填充。這也允許較佳的壓縮、較少的網路頻寬使用量,以及較少的叢集儲存量。這會導致增加保留。

    • 監控 CPU 和記憶體用量。

  • 針對高取用者輸送量

    • 增加每 MirrorMaker 個進程的線程/消費者數量-num.stream。

    • 在增加執行緒以實現高可用性之前,先增加機器之間的 MirrorMaker 處理序數量。

    • 首先在同一台機器上增加 MirrorMaker 進程數,然後在不同的計算機上(具有相同的組 ID)上增加進程的數量。

    • 隔離具有非常高輸送量的主題,並使用不同的 MirrorMaker 執行個體。

  • 針對管理和設定

    • 使用 AWS CloudFormation 和配置管理工具,如廚師和 Ansible。

    • 使用 Amazon EFS 掛載來維持所有 Amazon EC2 執行個體可存取的所有組態檔案。

    • 使用容器輕鬆擴展和管理 MirrorMaker執行個體。

  • 通常情況下,需要多個消費者才能使生產者飽和。 MirrorMaker所以,設定多個取用者。首先,將它們設定在不同的機器上以提供高可用性。然後,將個別機器擴展為每個分割區具有取用者,讓取用者平均分配在各個機器之間。

  • 對於高輸送量的擷取和傳遞,請調校接收和傳送緩衝區,因為它們的預設值可能太低。若要取得最大效能,請確定串流總數 (num.stream) 符合嘗試複製到目的地叢集的 MirrorMaker 所有主題分割區。

MirrorMaker 2.* 優勢

  • 使用 Apache Kafka Connect 框架與生態系統。

  • 偵測新主題和分割區。

  • 自動在叢集間同步主題組態。

  • 支援「作用中/作用中」叢集對,以及任何數量的作用中叢集。

  • 提供新的指標,包括跨多個資料中心和叢集的 end-to-end 複寫延遲。

  • 發出在叢集間遷移取用者所需要的位移,並提供位移平移的工具。

  • 與每 MirrorMaker 個 1.* 程序的低階產生器/用戶特性相比,支援高階組態檔案,可在單一位置指定多個叢集和複寫流程。