跳至內容

如何對 Amazon MSK 叢集中一個或多個代理程式的 CPU 使用率問題進行疑難排解?

2 分的閱讀內容
0

我想對 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 叢集中,一個或多個代理程式的高 CPU 使用率問題進行疑難排解。

解決方法

Amazon MSK 叢集的總 CPU 使用率是下列數值的總和:

  • 由指標 CpuUser 所定義使用者空間中的 CPU 百分比
  • CpuSystem 所定義核心空間中的 CPU 百分比

最佳實務是將總 CPU 使用率保持在 60% 以下,以便叢集有 40% 的 CPU 可用。Apache Kafka 可以根據需要在叢集中的代理程式之間重新分配 CPU 負載。例如,當某個代理程式發生故障時,Amazon MSK 可以使用可用的 CPU 執行自動維護,例如套用修補程式。

您的 Amazon MSK 叢集可能出現高 CPU 使用率的原因如下:

  • 傳入或傳出流量過高。
  • 每個代理程式的分區數超過限制,造成叢集超載。
  • 您使用 T 執行個體類型。

傳入或傳出流量過高

若要監控叢集的傳入和傳出流量,請使用 Amazon CloudWatch 指標 BytesInPerSecBytesOutPerSec。如果某個代理程式的這些指標數值過高或分布不均,則該代理程式可能會經歷高 CPU 使用率。

當高流量主題的分區分布不均時,代理程式可能會遇到高流量的情況。或者,生產者沒有將資料平均分配到所有分區。若要解決此問題,請檢查生產者的分區索引鍵並更新叢集組態。然後設定分區索引鍵,以確保一個分區取得的資料不超過其他分區。

當取用者群組非常頻繁地提交偏移量時,您也可能會遇到高流量的情況。來自偏移量提交的流量影響代理程式。若要解決此問題,請減少取用者群組的數量或升級您執行個體的大小。

每個代理程式的分區數超過建議值

如果每個代理程式的分區數超過建議值,則叢集會超載。當叢集超載時,您將無法執行以下操作:

  • 更新叢集組態。
  • 更新叢集的 Apache Kafka 版本。
  • 將叢集更新為較小的代理程式類型。
  • 將 AWS Secret Manager 密碼與具有 SASL/SCRAM 驗證的叢集建立關聯。

當分區過多時,可能會導致高 CPU 使用率並出現效能下降的情況。

若要解決此錯誤,請執行下列操作:

  • 刪除過時或未使用的主題,使分區計數落在建議的限值內。若要識別未使用的主題,請啟用主題層級監控,並檢查主題層級的 BytesInPerSecBytesOutPerSec 指標,查看是否有流量通過該主題。如果沒有流量通過,則可以刪除未使用的主題。
  • 將代理程式執行個體類型擴展為可容納您所需分區數量的類型。同時,增加更多代理程式並重新指派分區。

**注意:**您必須執行 kafka-reassign-partitions 命令來重新指派分區。當您新增代理程式時,Amazon MSK 不會自動重新指派分區。

您使用 T 執行個體類型

T 執行個體類型具有基準效能,其中包含某些爆量特性。這些執行個體可讓您有 20% CPU 使用率的基準效能。如果超過此值,則該執行個體類型會開始使用 CPU 點數。當使用率低於 20% 時,則會累積 CPU 點數。

請務必監控 Amazon CloudWatch 中爆量執行個體的 CPU 點數餘額指標

監控任何使用 T 執行個體類型之叢集的基準 CPU 使用率和點數餘額。如果 CPU 使用量超過基準,且沒有剩餘的點數可用,則叢集會發生效能問題。

其他可能原因

用戶端連線數量過高

下列任一Amazon CloudWatch 指標的激增都可能導致代理程式 CPU 使用率增加:

  • ConnectionCount
  • ConnectionCreationRate
  • ConnectionCloseRate

若要對此問題進行疑難排解,請在 Amazon CloudWatch 上監控這些指標。然後,根據需要減少連線數或擴展代理程式類型。

Amazon MSK 會偵測並從代理程式故障中復原

當 Amazon MSK 偵測到代理程式故障並執行自動維護操作 (例如套用修補程式) 時,CPU 使用率會上升。一旦 Amazon MSK 完成叢集操作,CPU 使用率便會恢復到正常水準。

使用者請求變更代理程式類型或升級版本

當使用者請求代理程式類型變更或版本升級時,Amazon MSK 會部署滾動工作流程,每次使一個代理程式離線。當具有前置分區的代理程式離線時,Apache Kafka 會重新指派分區前置值,以將工作重新分配給叢集中的其他代理程式。請監控這些代理程式的 CPU 使用率,並確保叢集有足夠的 CPU 預留空間以應對操作事件。

由於資料分布不均,一個或多個代理程式 CPU 使用率過高

一個或多個代理程式的 CPU 使用率可能因資料分布不均而過高。例如,如果您在六個代理程式中的兩個寫入資料,且這兩個代理程式耗用最多,則它們的 CPU 使用率會較高。若要解決此問題,請確保使用輪調技術,使叢集中的分區分布均勻。

若要查看 Apache Kafka 叢集控制器如何在叢集中分配分區,請執行以下命令:

bin/kafka-topics.sh -bootstrap-server $MYBROKERS --describe --topic my-topic

範例輸出:

Topic:my-topic    PartitionCount:7 ReplicationFactor:3 Configs:
    Topic: my-topic    Partition: 0 Leader: 1 Replicas: 1,3,2 Isr: 1,3,2
    Topic: my-topic    Partition: 1 Leader: 2 Replicas: 2,1,3 Isr: 2,1,3
    Topic: my-topic    Partition: 2 Leader: 3 Replicas: 3,2,1 Isr: 3,2,1
    Topic: my-topic    Partition: 3 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3
    Topic: my-topic    Partition: 4 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1
    Topic: my-topic    Partition: 5 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2

您已開啟開放式監控

如果您使用 Prometheus 開啟開放式監控且抓取間隔過短,可能會導致產生大量指標,進而增加 CPU 使用率。若要解決此問題,請增加抓取間隔。最佳實務是每個代理程式每分鐘最多抓取一次,以維護 Amazon MSK 叢集效能。預設情況下,抓取間隔為每 10 至15 秒一次。

AWS 官方已更新 3 個月前