為什麼 Kinesis 資料串流會遇到高延遲問題?

1 分的閱讀內容
0

我想知道為什麼我的 Amazon Kinesis 資料串流在取得資料記錄時延遲高。

簡短描述

如果每個 GET 請求的記錄數或記錄大小增加,GetRecords.Latency 可能會增加。如果您在生產者將資料擷取到串流時重新啟動應用程式,則記錄可以累積而不會消耗。記錄計數或要擷取的資料量的這種增加會增加 GetRecords.Latency 的值。如果應用程式無法跟上擷取速率,則 IteratorAge 會增加。

**注意:**在 Kinesis 資料串流上開啟伺服器端加密可能會增加延遲。

解決方法

使用 Amazon CloudWatch 監控 Kinesis 資料串流服務。檢查 CloudWatch 指標 (例如 GetRecords.Latency),以確認延遲增加是否持續。如果延遲增長是持續的,請檢查 CloudWatch 中的 IncomingRecordsIncomingBytesGetRecords.RecordsGetRecords.Bytes 是否也有增加。隨著資料量增加,這些指標會增加並導致高延遲。這種增加是因為,當 Kinesis 資料串流中有更多可用的記錄時,GetRecords 會擷取更多記錄。

如果您的 IteratorAge 也增加,則可能會有更多 IncomingBytes 放入串流中。檢查 CloudWatch 中的 IncomingBytes 指標,以確認位元組數是否增加。您可以檢查對串流的 GetRecords 呼叫是否減少。傳入位元組更多表示每個 GetRecords 呼叫在擷取更多資料,從而增加 GetRecords.Latency 的值。

如果您仍然觀察到高延遲 (即使 IncomingBytesIncomingRecords 沒有增加),則表示傳入的資料可能太多。如果消費者應用程式無法跟上傳入資料的速度,則資料會繼續累積在 Kinesis 資料串流中。即使重新啟動應用程式,每個 GetRecords 呼叫中也會擷取更多記錄。然後,每個 GetRecords 呼叫的記錄或擷取資料的增加會增加 GetRecords.Latency 的值。

若要解決此問題,請完成下列步驟:

  • 檢查您的應用程式,查看是否已進行足夠的 GetRecords 呼叫來處理傳入資料量。如果您使用 Amazon Kinesis Client Library (KCL) 應用程式或 AWS Lambda 作為消費者,請增加串流中的碎片數量。碎片數的增加會增加傳遞串流的消耗速率,並減小 IteratorAgeGetRecords.Latency 的值。
  • 延長 Kinesis 資料串流的保留期間,以避免任何資料丟失。較長的保留期間有助於應用程式跟上資料積壓的速度。
  • 如果您有消費者應用程式,請檢查處理邏輯並記錄處理時間。
  • 檢查系統的中央處理單元 (CPU) 和記憶體使用率,以查看是否需要釋放更多記憶體。
AWS 官方
AWS 官方已更新 5 個月前