本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用重新碎片、縮放和 parallel 處理來變更碎片數量
透過重新分片,您將能夠增加或減少串流中的碎片數目,以便適應通過串流的資料速率的變化。重新分片通常是由監控碎片資料處理指標的管理應用程式所執行。雖然本KCL身不會啟動重新碎片操作,但它的設計是為了適應重新碎片導致的碎片數量的變化。
如中所述使用租用表格來追蹤取用KCL者應用程式處理的碎片,這些資料會使用 Amazon DynamoDB 表KCL追蹤串流中的碎片。當由於重新碎片而建立新碎片時,會KCL發現新碎片並在表格中填入新列。工作者將自動發現新碎片並建立處理器以處理取自各個碎片的資料。KCL也會將串流中的碎片分配到所有可用的 Worker 和記錄處理器。
KCL確保首先處理重新碎片之前存在於碎片中的任何數據。處理過該等資料後,新碎片中的資料將傳送至記錄處理器。如此一來,就會KCL保留特定分割區索引鍵的資料記錄新增至串流的順序。
範例:重新分片、縮放和 parallel 處理
下列範例說明如何KCL協助您處理縮放和重新碎片:
-
例如,如果您的應用程式在一個執行個EC2體上執行,而且正在處理一個具有四個碎片的 Kinesis 資料串流。這個執行個體有一個 KCL Worker 和四個記錄處理器 (每個碎片都有一個記錄處理器)。前述的四個記錄處理器在同一程序內平行執行。
-
接著,如果您擴展應用程式又使用另一執行個體,就會有兩個執行個體共同處理具有四個碎片的單一串流。當 KCL Worker 在第二個執行個體上啟動時,它會與第一個執行個體進行負載平衡,因此每個執行個體現在都會處理兩個碎片。
-
假設您隨後決定將四個碎片分割成五個碎片。KCL再次協調跨實例的處理:一個實例處理三個分片,另一個處理兩個碎片。在您合併碎片時同樣會進行類似的協調。
一般而言,當您使用時KCL,應確保執行個體數目不超過碎片數目 (除了失敗待命目的之外)。每個碎片只由一個 KCL Worker 處理,並且只有一個對應的記錄處理器,因此您不需要多個實例來處理一個碎片。不過,單一工作者能夠處理任意數目的碎片,所以碎片數目多過執行個體數目並無妨。
若要就您的應用程式擴展處理規模,您應組合測試以下幾種方法:
-
增加執行個體大小 (因為所有的記錄處理器在同一程序內平行執行)
-
增加執行個體數目,最多達開放碎片數目的上限 (因為碎片可以單獨處理)
-
增加碎片數目 (如此將提高平行處理的等級)
請注意,您可以使用自動擴展根據適當的指標自動擴展您的執行個體。如需詳細資訊,請參閱 Amazon EC2 Auto Scaling 使用者指南。
當重新碎片增加串流中的碎片數量時,記錄處理器數目的相應增加會增加裝載它們的EC2執行個體的負載。如果執行個體屬於 Auto Scaling 群組的一部分,當負載增加至足量後,Auto Scaling 群組就會添加更多執行個體以處理增加的負載。您應將執行個體設定成啟動時便啟動您的 Amazon Kinesis Data Streams 應用程式,好讓新執行個體上的其他工作者和記錄處理器能立即起作用。
如需重新分片的詳細資訊,請參閱重新碎片流。