在仔細考慮之後,我們決定在兩個步驟中停止 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 個碎片,且您設定 InputParallelism
為 2
,則每個應用程式內輸入串流都會接收來自 25 個來源串流碎片的輸入。
增加應用程式內串流的數量時,您的應用程式必須明確存取每個串流中的資料。如需在程式碼中存取多個應用程式內串流的相關資訊,請參閱 在 Amazon Kinesis Data Analytics 應用程式中存取個別應用程式內串流。
雖然 Kinesis Data Streams 和 Firehose 串流碎片會以相同的方式在應用程式內串流分割,但它們在應用程式中的外觀有所不同:
Kinesis 資料串流中的記錄包含
shard_id
欄位,可用來識別記錄來源碎片。Firehose 傳送串流中的記錄不包含識別記錄來源碎片或分割區的欄位。這是因為 Firehose 會將這些資訊從您的應用程式中抽象出來。
評估是否增加應用程式內輸入串流的數量
在大多數情況下,單一應用程式內輸入串流可以處理單一來源串流的輸送量,視輸入串流的複雜性和資料大小而定。若要判斷是否需要增加應用程式內輸入串流的數量,您可以在 Amazon CloudWatch 中監控InputBytes
和MillisBehindLatest
指標。
如果 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
產生輸出,類似下列所示:
其他考量
當您使用多個輸入串流時,請注意下列事項:
應用程式內輸入串流數量上限為 64 個。
應用程式內的輸入串流,會平均分佈在應用程式輸入串流的碎片之間。
新增應用程式內串流所帶來的效能不會線性擴展。也就是說,加倍應用程式內串流的數量並不會讓輸送量增加一倍。使用典型的資料列大小,每個應用程式內串流可達到每秒約 5,000 至 15,000 個資料列的輸送量。將應用程式內串流計數增加到 10,您可以達到每秒 20,000 到 30,000 個資料列的輸送量。輸送量速度取決於輸入串流中欄位的計數、資料類型和資料大小。
當套用至分割成不同碎片的輸入資料流時,某些彙總函式 (例如 AVG) 可能會產生非預期的結果。因為您必須先在個別碎片上執行彙總作業,然後再將它們合併到彙總串流中,因此結果可能會加權為包含更多記錄的任何資料流。
如果在增加輸入串流數量後,您的應用程式在持續效能不佳 (反映在高
MillisBehindLatest
指標),您可能已達到 Kinesis 處理單元 (KPU) 的上限。如需更多詳細資訊,請參閱 自動擴展應用程式以增加輸送量。