選擇資料串流容量模式 - Amazon Kinesis Data Streams

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

選擇資料串流容量模式

什麼是資料串流容量模式?

容量模式會決定資料串流容量的管理方式,以及如何根據資料串流用量收費。在 Amazon Kinesis Data Streams 中,您可為資料串流選擇隨需模式或佈建模式。

  • 隨需 - 具有隨需模式的資料串流不需要規劃容量,而且會自動擴展以處理每分鐘 GB 的寫入和讀取輸送量。使用隨需模式時,Kinesis Data Streams 會自動管理碎片,以提供必要的輸送量。

  • 已佈建 - 對於採用佈建模式的資料串流,必須指定資料串流的碎片數目。資料串流的總容量是其碎片容量的總和。您可以視需要增加或減少資料串流中的碎片數目。

您可以使用 Kinesis Data Streams PutRecordPutRecords API,以隨需和佈建的容量模式同時將資料寫入資料串流。為了擷取資料,這兩種容量模式都支援使用 GetRecords API 的預設取用者,以及使用 SubscribeToShard API 的增強型散發 (EFO) 取用者。

隨需和佈建兩種模式都支援所有 Kinesis Data Streams 功能,包括保留模式、加密、監控指標和其他功能。Kinesis Data Streams 可在隨需和佈建容量兩種模式下提供高耐久性和可用性。

隨需模式

具有隨需模式的資料串流不需要規劃容量,而且會自動擴展以處理每分鐘 GB 的寫入和讀取輸送量。隨需模式可簡化以低延遲的方式擷取和儲存大量資料,因為無需佈建和管理伺服器、儲存裝置或輸送量。您每天可以擷取數十億筆記錄,而不會產生任何營運開銷。

隨需模式非常適合應對高度變化且無法預測的應用程式流量需求。您不再需要為尖峰容量佈建這些工作負載,這可能會因為使用率低而導致更高的成本。隨需模式適用於流量模式不可預測且高度變化的工作負載。

使用隨需容量模式,您可以按從資料串流寫入和讀取的資料 GB 數量付費。不需要指定您預期應用程式將進行的讀取和寫入輸送量。Kinesis Data Streams 會在您的工作負載上升或下降時,立即因應。如需詳細資訊,請參閱 Amazon Kinesis Data Streams 定價

您可以使用 Kinesis Data Streams 主控台、API 或 CLI 命令,以隨需模式建立新的資料串流。

隨需模式下的資料串流最多可容納前 30 天觀察到的尖峰寫入輸送量的兩倍。當資料串流的寫入輸送量達到新的尖峰時,Kinesis Data Streams 會自動擴展資料串流的容量。例如,如果您的資料串流的寫入輸送量在 10 MB/s 和 40 MB/s 之間變化,Kinesis Data Streams 可確保您可以輕鬆提升至先前的尖峰輸送量增加一倍,或是 80 MB/s。如果相同的資料串流維持 50 MB/s 的新尖峰輸送量,則 Kinesis Data Streams 可確保有足夠的容量來擷取 100 MB/s 的寫入輸送量。但是,如果流量在 15 分鐘的持續時間內增加到前一個峰值的兩倍以上,則可能會發生寫入限流。您必須重試這些限流的請求。

使用隨需模式的資料串流彙總讀取容量會與寫入輸送量成比例增加。這有助於確保取用者應用程式永遠具有足夠的讀取輸送量來即時處理傳入資料。與使用 GetRecords API 讀取資料相比,您會取得至少兩倍的寫入輸送量。建議您將一個取用者應用程式與 GetRecord API 搭配使用,以便在應用程式需要從停機時間復原時,該應用程式有足夠的空間來跟進。對於需要新增多個取用者應用程式的案例,建議您使用 Kinesis Data Streams 的增強型散發功能。增強型散發支援使用 SubscribeToShard API 將最多 20 個取用者應用程式新增至資料串流,每個取用者應用程式都有專用輸送量。

處理讀取和寫入輸送量例外狀況

使用隨需容量模式 (與佈建的容量模式相同) 時,您必須指定每筆記錄的分割區索引鍵,以將資料寫入資料串流。Kinesis Data Streams 會使用您的分割區索引鍵在碎片之間分發資料。Kinesis Data Streams 會監控每個碎片的流量。當傳入流量超過每個碎片 500 KB/s 時,其會在 15 分鐘內對碎片進行分割。父碎片的雜湊索引鍵值在子碎片中均勻地重新分配。

如果傳入流量超過先前峰值的兩倍,即使資料平均分佈在碎片上,您也可以體驗大約 15 分鐘的讀取或寫入例外狀況。建議您重試所有此類請求,以便將所有記錄正確儲存在 Kinesis Data Streams 中。

如果您使用的分割區索引鍵會導致資料分配不均,且指派給特定碎片的記錄超出其限制,則可能會遇到讀取和寫入例外狀況。使用隨需模式時,資料串流會自動適應以處理不均勻的資料分配模式,除非單一分割區索引鍵超過碎片的 1 MB/s 輸送量和每秒 1000 筆記錄限制。

在隨需模式中,Kinesis Data Streams 偵測到流量增加時,會平均分割碎片。但是,它不會偵測和隔離將較高部分傳入流量導向特定碎片的雜湊索引鍵。如果您使用的是高度不均勻的分割區索引鍵,則可能會繼續收到寫入異常。如需此使用案例,建議使用支援精細碎片分割的佈建容量模式。

佈建模式

使用佈建模式,建立資料串流後,您可以使用或 UpdateShardCountAPI 動態擴展或縮減碎片容量。 AWS Management Console 當有 Kinesis Data Streams 生產者或取用者應用程式正在寫入或從串流讀取資料時,您可以進行更新。

佈建模式適用於容量需求且易於預測的可預測流量。如果您想要對資料在碎片之間分發的方式進行更精細控制,則可以使用佈建模式。

採用佈建模式,必須指定資料串流的碎片數目。若要決定使用佈建模式的資料串流的大小,您需要以下各項輸入值:

  • 寫入串流的資料記錄其平均大小 (KB 數),無條件進位至 1 KB (average_data_size_in_KB)。

  • 每秒寫入串流以及從串流讀取的資料記錄筆數 (records_per_second)。

  • 同時各自從串流取用資料的 Kinesis Data Streams 應用程式數目,即取用者數目 (number_of_consumers)。

  • 單位為 KB 的傳入寫入頻寬 (incoming_write_bandwidth_in_KB),其值等於 average_data_size_in_KB 乘以 records_per_second

  • 單位為 KB 的傳出讀取頻寬 (outgoing_read_bandwidth_in_KB),其值等於 incoming_write_bandwidth_in_KB 乘以 number_of_consumers

您可使用以下公式帶入輸入值,計算串流所需的碎片數目 (number_of_shards)。

number_of_shards = max(incoming_write_bandwidth_in_KiB/1024, outgoing_read_bandwidth_in_KiB/2048)

如果您未設定處理尖峰輸送量的資料串流,則可能仍會在佈建模式中遇到讀取和寫入輸送量例外狀況。在這種情形下,您必須手動擴展資料串流以適應資料流量。

如果您使用的分割區索引鍵會導致資料分配不均,且指派給碎片的記錄超出其限制,則可能會遇到讀取和寫入例外狀況。若要在佈建模式中解決此問題,請識別此類碎片並手動分割,以更好地容納您的流量。如需詳細資訊,請參閱將串流重新分片

在容量模式之間進行切換

您可以將資料串流的容量模式從隨需切換為佈建,或從佈建切換為隨需。對於 AWS 帳戶中的每個資料串流,在 24 小時內可在隨需和佈建容量模式之間切換兩次。

在資料串流的容量模式之間進行切換不會對使用此資料串流的應用程式造成任何中斷。您可以繼續寫入此資料串流和從中讀取資料。當您在容量模式之間切換 (從隨需到佈建或從佈建到隨需) 時,串流的狀態會設定為更新。您必須等待資料串流狀態變為作用中,才能再次修改其屬性。

當您從佈建容量模式切換到隨需容量模式時,資料串流最初會保留轉換前的碎片計數,從此開始,Kinesis Data Streams 會監控您的資料流量,並根據您的寫入輸送量擴展此隨需資料串流的碎片計數。

當您從隨需模式切換到佈建模式時,資料串流一開始也會保留轉換前的碎片計數,但從此開始,您負責監控和調整此資料串流的碎片計數,以適當地容納您的寫入輸送量。