平行化輸入串流以提高輸送量 - Amazon Kinesis Data Analytics for SQL Applications 開發人員指南

在仔細考慮之後,我們決定在兩個步驟中停止 Amazon Kinesis Data Analytics for SQL 應用程式:

1. 從 2025 年 10 月 15 日起,您將無法為SQL應用程式建立新的 Kinesis Data Analytics。

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

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

平行化輸入串流以提高輸送量

注意

2023 年 9 月 12 日之後,如果尚未使用 Kinesis Data Analytics for SQL,您將無法使用 Kinesis Data Firehose 做為建立新應用程式的來源。如需詳細資訊,請參閱限制

Amazon Kinesis Data Analytics 應用程式可支援多個應用程式內輸入串流,將應用程式擴展到超越單一應用程式內輸入串流的輸送量。如需應用程式內輸入串流的詳細資訊,請參閱 Amazon Kinesis Data Analytics for SQL 應用程式:運作方式

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

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

增加應用程式內串流的數量時,您的應用程式必須明確存取每個串流中的資料。如需在程式碼中存取多個應用程式內串流的相關資訊,請參閱 在 Amazon Kinesis Data Analytics 應用程式中存取個別應用程式內串流

雖然 Kinesis Data Streams 和 Firehose 串流碎片會以相同的方式在應用程式內串流分割,但它們在應用程式中的外觀有所不同:

  • Kinesis 資料串流中的記錄包含 shard_id 欄位,可用來識別記錄來源碎片。

  • Firehose 傳送串流中的記錄不包含識別記錄來源碎片或分割區的欄位。這是因為 Firehose 會將這些資訊從您的應用程式中抽象出來。

評估是否增加應用程式內輸入串流的數量

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

如果 InputBytes 指標大於每秒 100 MB (或者您預期它會大於此速率),這可能會導致 MillisBehindLatest 提高,並增加應用程式問題的影響。為了解決這個問題,我們建議您為應用程式選擇下列語言:

  • 如果應用程式的擴展需求超過每秒 100 MB,請針對 SQL 應用程式使用多個串流和 Kinesis Data Analytics。

  • 如果您想要使用單一串流和應用程式,請使用Kinesis Data Analytics for Java 應用程式

如果 MillisBehindLatest 指標具有下列任一特性,則應增加應用程式的 InputParallelism 設定:

  • MillisBehindLatest 指標逐漸增加,表示您的應用程式逐漸落後串流中的最新資料。

  • MillisBehindLatest 指標一直高於 1000 (一秒)。

如果符合下列條件,就不需要增加應用程式的 InputParallelism 設定:

  • MillisBehindLatest 指標逐漸減少,表示您的應用程式逐漸趕上串流中的最新資料。

  • MillisBehindLatest 指標低於 1000 (一秒)。

若要取得有關使用的更多資訊 CloudWatch,請參閱CloudWatch 使用指南

實作多個應用程式內輸入串流

在使用 CreateApplication 建立應用程式時,您可以設定應用程式內輸入串流的數目。您可以使用 UpdateApplication 在建立應用程式後設定此數字。

注意

您只能使用 Amazon Kinesis Data Analytics API 或 AWS CLI來做出 InputParallelism 設定。您無法使用設定此設定 AWS Management Console。如需有關設定的資訊 AWS CLI,請參閱步驟 2:設定 AWS Command Line Interface (AWS CLI)

設定新應用程式的輸入串流計數

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

如需 CreateApplication 的相關資訊,請參閱 CreateApplication

{ "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": [ ... ], }] }

設定現有應用程式的輸入串流計數

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

如需 Update_Application 的相關資訊,請參閱 UpdateApplication

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

在 Amazon Kinesis Data Analytics 應用程式中存取個別應用程式內串流

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

在下列範例中,會先使用 COUNT 彙總每個來源資料流,然後再合併到名為 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.

其他考量

當您使用多個輸入串流時,請注意下列事項:

  • 應用程式內輸入串流數量上限為 64 個。

  • 應用程式內的輸入串流,會平均分佈在應用程式輸入串流的碎片之間。

  • 新增應用程式內串流所帶來的效能不會線性擴展。也就是說,加倍應用程式內串流的數量並不會讓輸送量增加一倍。使用典型的資料列大小,每個應用程式內串流可達到每秒約 5,000 至 15,000 個資料列的輸送量。將應用程式內串流計數增加到 10,您可以達到每秒 20,000 到 30,000 個資料列的輸送量。輸送量速度取決於輸入串流中欄位的計數、資料類型和資料大小。

  • 當套用至分割成不同碎片的輸入資料流時,某些彙總函式 (例如 AVG) 可能會產生非預期的結果。因為您必須先在個別碎片上執行彙總作業,然後再將它們合併到彙總串流中,因此結果可能會加權為包含更多記錄的任何資料流。

  • 如果在增加輸入串流數量後,您的應用程式在持續效能不佳 (反映在高 MillisBehindLatest 指標),您可能已達到 Kinesis 處理單元 (KPU) 的上限。如需更多詳細資訊,請參閱 自動擴展應用程式以增加輸送量