

在仔細考慮之後，我們決定停止 Amazon Kinesis Data Analytics for SQL 應用程式：

1. 從 **2025 年 9 月 1 日起，**我們不會為 Amazon Kinesis Data Analytics for SQL 應用程式提供任何錯誤修正，因為考慮到即將終止，我們將對其提供有限的支援。

2. 從 **2025 年 10 月 15 日起，**您將無法建立新的 Kinesis Data Analytics for SQL 應用程式。

3. 我們將自 **2026 年 1 月 27** 日起刪除您的應用程式。您將無法啟動或操作 Amazon Kinesis Data Analytics for SQL 應用程式。從那時起，Amazon Kinesis Data Analytics for SQL 將不再提供支援。如需詳細資訊，請參閱[Amazon Kinesis Data Analytics for SQL 應用程式終止](discontinuation.md)。

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

# 平行化輸入串流以提高輸送量
<a name="input-parallelism"></a>

**注意**  
2023 年 9 月 12 日之後，如果尚未使用 Kinesis Data Analytics for SQL，您將無法使用 Kinesis Data Firehose 做為建立新應用程式的來源。如需詳細資訊，請參閱[限制](https://docs.aws.amazon.com//kinesisanalytics/latest/dev/limits.html)。

Amazon Kinesis Data Analytics 應用程式可支援多個應用程式內輸入串流，將應用程式擴展到超越單一應用程式內輸入串流的輸送量。如需應用程式內輸入串流的詳細資訊，請參閱 [Amazon Kinesis Data Analytics for SQL 應用程式：運作方式](how-it-works.md)。

在幾乎所有情況下，Amazon Kinesis Data Analytics 都會擴展您的應用程式，以處理饋送至應用程式的 Kinesis 串流或 Firehose 來源串流的容量。不過，如果來源串流的輸送量超過單一應用程式內輸入串流的輸送量，您可以明確增加應用程式使用的應用程式內輸入串流數目。您可以使用 `InputParallelism` 參數來執行此操作。

當 `InputParallelism` 參數大於一時，Amazon Kinesis Data Analytics 會在應用程式內串流中平均分割來源串流的分割區。舉例來說，如果來源串流有 50 個碎片，且您設定 `InputParallelism` 為 `2`，則每個應用程式內輸入串流都會接收來自 25 個來源串流碎片的輸入。

增加應用程式內串流的數量時，您的應用程式必須明確存取每個串流中的資料。如需在程式碼中存取多個應用程式內串流的相關資訊，請參閱 [在 Amazon Kinesis Data Analytics 應用程式中存取個別應用程式內串流](#input-parallelism-code-example)。

雖然 Kinesis Data Streams 和 Firehose 串流碎片在應用程式內串流之間以相同的方式分割，但它們在您的應用程式上顯示的方式有所不同：
+ Kinesis 資料串流中的記錄包含 `shard_id` 欄位，可用來識別記錄來源碎片。
+ Firehose 交付串流中的記錄不包含可識別記錄來源碎片或分割區的欄位。這是因為 Firehose 會將此資訊從您的應用程式抽象化。

## 評估是否增加應用程式內輸入串流的數量
<a name="input-parallelism-evaluating"></a>

在大多數情況下，單一應用程式內輸入串流可以處理單一來源串流的輸送量，視輸入串流的複雜性和資料大小而定。若要判斷是否需要增加應用程式內輸入串流的數量，您可以在 Amazon CloudWatch 中監控 `InputBytes` 和 `MillisBehindLatest` 指標。

如果 `InputBytes` 指標大於每秒 100 MB (或者您預期它會大於此速率)，這可能會導致 `MillisBehindLatest` 提高，並增加應用程式問題的影響。為了解決這個問題，我們建議您為應用程式選擇下列語言：
+ 如果應用程式的擴展需求超過每秒 100 MB，請針對 SQL 應用程式使用多個串流和 Kinesis Data Analytics。
+ 如果您想要使用單一串流和應用程式，請使用[Kinesis Data Analytics for Java 應用程式](/managed-flink/latest/java/what-is.html)。

如果 `MillisBehindLatest` 指標具有下列任一特性，則應增加應用程式的 `InputParallelism` 設定：
+ `MillisBehindLatest` 指標逐漸增加，表示您的應用程式逐漸落後串流中的最新資料。
+ `MillisBehindLatest` 指標一直高於 1000 (一秒)。

如果符合下列條件，就不需要增加應用程式的 `InputParallelism` 設定：
+ `MillisBehindLatest` 指標逐漸減少，表示您的應用程式逐漸趕上串流中的最新資料。
+ `MillisBehindLatest` 指標低於 1000 (一秒)。

如需有關 CloudWatch 的詳細資訊，請參閱 [CloudWatch 使用者指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)。

## 實作多個應用程式內輸入串流
<a name="input-parallelism-implementing"></a>

在使用 [CreateApplication](API_CreateApplication.md) 建立應用程式時，您可以設定應用程式內輸入串流的數目。您可以使用 [UpdateApplication](API_UpdateApplication.md) 在建立應用程式後設定此數字。

**注意**  
您只能使用 Amazon Kinesis Data Analytics API 或 AWS CLI來做出 `InputParallelism` 設定。您無法使用 設定此設定 AWS 管理主控台。如需設定 的資訊 AWS CLI，請參閱 [步驟 2：設定 AWS Command Line Interface (AWS CLI)](setup-awscli.md)。

### 設定新應用程式的輸入串流計數
<a name="input-parallelism-implementing-create"></a>

以下範例示範如何使用 `CreateApplication` API 動作，將新的應用程式輸入串流計數設定為 2。

如需 `CreateApplication` 的相關資訊，請參閱 [CreateApplication](API_CreateApplication.md)。

```
{
   "ApplicationCode": "<The SQL code the new application will run on the input stream>",
   "ApplicationDescription": "<A friendly description for the new application>",
   "ApplicationName": "<The name for the new application>",
   "Inputs": [ 
    { 
      "InputId": "ID for the new input stream",
      "InputParallelism": { 
        "Count": 2
    }],
   "Outputs": [ ... ],
	}]
}
```

### 設定現有應用程式的輸入串流計數
<a name="input-parallelism-implementing-update"></a>

以下範例示範如何使用 `UpdateApplication` API 動作，將現有應用程式輸入串流計數設定為 2。

如需 `Update_Application` 的相關資訊，請參閱 [UpdateApplication](API_UpdateApplication.md)。

```
{
   "InputUpdates": [ 
      { 
         "InputId": "yourInputId",
         "InputParallelismUpdate": { 
            "CountUpdate": 2
         }
      }
   ],
}
```

## 在 Amazon Kinesis Data Analytics 應用程式中存取個別應用程式內串流
<a name="input-parallelism-code-example"></a>

若要在應用程式中使用多個應用程式內輸入串流，您必須從不同的串流中明確選取。下列程式碼範例，示範了如何在入門教學課程建立的應用程式中查詢多個輸入串流。

在下列範例中，會先使用 [COUNT](https://docs.aws.amazon.com/kinesisanalytics/latest/sqlref/sql-reference-count.html) 彙總每個來源資料流，然後再合併到名為 `in_application_stream001` 的單一應用程式內串流。事先彙總來源串流，有助於確保合併的應用程式內串流可以處理來自多個串流的流量，而不會超載。

**注意**  
若要執行此範例並從應用程式內輸入串流取得結果，請同時更新來源串流中的碎片數目，和應用程式中的 `InputParallelism` 參數。

```
CREATE OR REPLACE STREAM in_application_stream_001 (
    ticker VARCHAR(64),
    ticker_count INTEGER
);

CREATE OR REPLACE PUMP pump001 AS 
INSERT INTO in_application_stream_001
SELECT STREAM ticker_symbol, COUNT(ticker_symbol)
FROM source_sql_stream_001
GROUP BY STEP(source_sql_stream_001.rowtime BY INTERVAL '60' SECOND),
    ticker_symbol; 
        
CREATE OR REPLACE PUMP pump002 AS 
INSERT INTO in_application_stream_001
SELECT STREAM ticker_symbol, COUNT(ticker_symbol)
FROM source_sql_stream_002
GROUP BY STEP(source_sql_stream_002.rowtime BY INTERVAL '60' SECOND),
    ticker_symbol;
```

上述程式碼範例會在 `in_application_stream001` 產生輸出，類似下列所示：

![\[Table showing ROWTIME, TICKER, and TICKER_COUNT columns with sample data entries.\]](http://docs.aws.amazon.com/zh_tw/kinesisanalytics/latest/dev/images/input-parallelism-results.png)


## 其他考量
<a name="input-parallelism-considerations"></a>

當您使用多個輸入串流時，請注意下列事項：
+ 應用程式內輸入串流數量上限為 64 個。
+ 應用程式內的輸入串流，會平均分佈在應用程式輸入串流的碎片之間。
+ 新增應用程式內串流所帶來的效能不會線性擴展。也就是說，加倍應用程式內串流的數量並不會讓輸送量增加一倍。使用典型的資料列大小，每個應用程式內串流可達到每秒約 5,000 至 15,000 個資料列的輸送量。將應用程式內串流計數增加到 10，您可以達到每秒 20,000 到 30,000 個資料列的輸送量。輸送量速度取決於輸入串流中欄位的計數、資料類型和資料大小。
+ 當套用至分割成不同碎片的輸入資料流時，某些彙總函式 (例如 [AVG](https://docs.aws.amazon.com/kinesisanalytics/latest/sqlref/sql-reference-avg.html)) 可能會產生非預期的結果。因為您必須先在個別碎片上執行彙總作業，然後再將它們合併到彙總串流中，因此結果可能會加權為包含更多記錄的任何資料流。
+ 如果在增加輸入串流數量後，您的應用程式在持續效能不佳 (反映在高 `MillisBehindLatest` 指標)，您可能已達到 Kinesis 處理單元 (KPU) 的上限。如需詳細資訊，請參閱[自動擴展應用程式以增加輸送量](how-it-works-autoscaling.md)。