

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

# 使用重新分片、擴展和平行處理來變更碎片數量
<a name="kinesis-record-processor-scaling"></a>

透過*重新分片*，您將能夠增加或減少串流中的碎片數目，以便適應通過串流的資料速率的變化。重新分片通常是由監控碎片資料處理指標的管理應用程式所執行。儘管 KCL 本身不會初始化重新分片操作，但其設計能夠適應碎片數目因重新分片而造成的變化。

如 [使用租用資料表來追蹤 KCL 取用者應用程式處理的碎片](shared-throughput-kcl-consumers.md#shared-throughput-kcl-consumers-leasetable) 所述，KCL 使用 Amazon DynamoDB 資料表追蹤串流中的碎片。當重新分片造成建立新碎片時，KCL 會發現新碎片並於該資料表內填入新的列。工作者將自動發現新碎片並建立處理器以處理取自各個碎片的資料。KCL 還會將串流中的碎片分配給所有可用的工作者和記錄處理器。

KCL 將確保在重新分片之前已優先處理碎片中現存的任何資料。處理過該等資料後，新碎片中的資料將傳送至記錄處理器。如此一來，KCL 便維持了特定分割區索引鍵的資料記錄加入至串流的順序。

## 範例：重新分片、擴展和平行處理
<a name="kinesis-record-processor-scaling-example"></a>

以下範例說明 KCL 將如何協助您處理擴展和重新分片：
+ 舉例而言，假設您的應用程式在某個 EC2 執行個體上執行，且要處理具有四個碎片的單一 Kinesis 資料串流。該執行個體有一個 KCL 工作者和四個記錄處理器 (每個碎片各一個記錄處理器)。前述的四個記錄處理器在同一程序內平行執行。
+ 接著，如果您擴展應用程式又使用另一執行個體，就會有兩個執行個體共同處理具有四個碎片的單一串流。當第二個執行個體上的 KCL 工作者啟動後，其將與第一個執行個體進行負載平衡，以致每一執行個體現在各自處理兩個碎片。
+ 假設您隨後決定將四個碎片分割成五個碎片。KCL 會再次協調跨執行個體的處理方式：執行個體之其一處理三個碎片，其二處理兩個碎片。在您合併碎片時同樣會進行類似的協調。

一般而言，使用 KCL 時，您應確保執行個體數目未多過碎片數目 (故障待命者除外)。每個碎片恰由一個 KCL 工作者處理且正好有一個對應的記錄處理器，如此便根本不必由多個執行個體處理單一碎片。不過，單一工作者能夠處理任意數目的碎片，所以碎片數目多過執行個體數目並無妨。

若要就您的應用程式擴展處理規模，您應組合測試以下幾種方法：
+ 增加執行個體大小 (因為所有的記錄處理器在同一程序內平行執行)
+ 增加執行個體數目，最多達開放碎片數目的上限 (因為碎片可以單獨處理)
+ 增加碎片數目 (如此將提高平行處理的等級)

請注意，您可以使用自動擴展根據適當的指標自動擴展您的執行個體。如需詳細資訊，請參閱 [Amazon EC2 Auto Scaling 使用者指南](https://docs.aws.amazon.com/autoscaling/ec2/userguide/)。

當重新分片致使串流中的碎片數目增加時，記錄處理器數目相對地增加將會增加託管處理器的 EC2 執行個體所承受的負載。如果執行個體屬於 Auto Scaling 群組的一部分，當負載增加至足量後，Auto Scaling 群組就會添加更多執行個體以處理增加的負載。您應將執行個體設定成啟動時便啟動您的 Amazon Kinesis Data Streams 應用程式，好讓新執行個體上的其他工作者和記錄處理器能立即起作用。

如需重新分片的詳細資訊，請參閱[重新分片串流](kinesis-using-sdk-java-resharding.md)。