當我升級 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 叢集時,我需要疑難排解問題。
解決方法
考量事項和最佳做法
升級 Amazon MSK 叢集之前,請注意下列事項:
- 請務必將叢集的複寫係數設定為 3 或更高的值。將複寫係數設定為 1 可能會導致在輪替更新期間產生離線分區。將複寫係數設定為 2 可能會導致資料遺失。
- 將最小同步複本 (miniSR) 設定為 (複寫係數-1) 或更小的值。與複寫係數相同的 miniSD 值可能會導致您無法在輪替更新期間產生至叢集。當一個複本離線時,MiniR 為 2 允許三向複寫主題可用。
- 請確定用戶端連線字串至少包含每個可用區域中的一個代理程式。在用戶端的連線字串中有多個代理程式,可在特定代理程式離線進行更新時進行容錯移轉。
- 更新叢集的設定之前,請確定叢集處於 ACTIVE 狀態。
- 在低流量時間升級叢集是最佳做法。升級 Apache Kafka 版本所需的時間長短取決於叢集中的代理程式數目。
- 升級叢集版本時,您無法對叢集進行其他更新。您仍然可以在升級期間從叢集產生和消耗。
- 除了複寫不足的主題以外,在升級期間沒有資料遺失的風險 (範例:複寫係數小於 3 的主題)。即使在這種情況下,代理程式在線後,分區也可以再次使用。
- 您可以透過 Amazon MSK 主控台或 AWS Command Line Interface (AWS CLI)更新 Amazon MSK 叢集的 Apache Kafka 版本。
- 您可以將 Amazon MSK 叢集更新為較新版本的 Apache Kafka 。您無法將其更新為舊版本。
- Amazon MSK 只會更新伺服器軟體,不會更新您的用戶端。因此,當您升級叢集時,請確認您可以將新 Apache Kafka 版本的功能與用戶端軟體版本搭配使用。
- 更新執行個體類型並不會升級叢集版本。
監控升級
當您建立 Amazon MSK 叢集時,您需要在叢集上指定所需的 Apache Kafka 版本。您也可以執行下列動作,在建立叢集之後,將叢集更新為較新版本的 Apache Kafka:
- 開啟 Amazon MSK 控制台。
- 選取您要升級的叢集。
- 在「屬性」索引標籤上,選取「Apache Kafka 版本」 區段中的「升級」。
如需更多資訊,請參閱更新 Apache Kafka 版本。
您可以在「叢集作業」索引標籤上監視更新的進度。您可以從此索引標籤監視升級的每個步驟,例如初始化升級、更新 Apache Kafka 版本和完成升級。升級達到 17% 之後,可能需要數小時才能完成升級。請注意,Amazon MSK 會以輪替方式執行升級。一次將一個代理程式從集群中取出,並升級其 Kafka 版本。該代理程式重新加入,因為下一個代理程式被取出。遵循此過程,直到最後一個代理程式使用新的 Kafka 版本進行升級。
疑難排解常見錯誤
更新叢集設定時發生錯誤 更新叢集設定時發生問題。如果問題仍然存在,請聯絡 AWS Support。每個代理程式的分區數目超過建議的限制。新增更多代理程式並將每個代理程式的分區重新排列為低於建議的限制,然後重試要求。
-或-
升級停留在「初始化升級」階段
當每個代理程式的分區數目超過建議的值時,您會收到此錯誤。在代理程式上處理分區是資源密集型工作負載。如果分區數目超過建議的限制,可能會對叢集中的可用資源造成壓力。在此情況下,您無法在叢集上執行下列任何作業:
- 更新叢集設定
- 更新叢集的 Apache Kafka 版本
- 將叢集更新為較小的代理程式類型
若要解決此錯誤,請嘗試下列動作:
- 增加叢集中的代理程式數目。然後,重新分配分區以減少每個代理程序的分區數目。使用 Amazon CloudWatch 指標來瞭解每個代理程式的分區數目。分區計數是每個代理程式 (包括複本) 的主題分區總數。依預設,每個主題的分區數目為 1,而 3-AZ 叢集的複寫係數為 3。因此,每個主題有 3 個分區,因為 3 的複寫係數包括主要分區。若要將分區移至相同叢集上的不同代理程式,您可以使用名為** kafka-reassign-partitions.sh 的磁碟分割重新指派工具**。
- 刪除未使用的主題以減少分區數量。您可以使用下列命令來查看叢集上的所有主題以及分區數目。執行命令之前,請務必先在 Amazon Elastic Compute Cloud (Amazon EC2) 機器上設定 Apache Kafka 用戶端。
bin/kafka-topics.sh —bootstrap-server localhost:9092 —describe —topic test