問:什麼是 Amazon Kinesis Analytics?

Amazon Kinesis Analytics 是處理和分析即時串流資料最簡單的方式。使用 Amazon Kinesis Analytics,您只需使用標準 SQL 來處理資料串流,且不必學習任何新的程式設計語言。只需將 Kinesis Analytics 指向傳入的資料串流、編寫 SQL 查詢,然後指定要載入結果的位置。Kinesis Analytics 會在傳送中的資料持續執行您的 SQL 查詢並將結果傳送到目的地。

問:什麼是即時串流處理?為什麼我需要它?

由於即時資料來源的大幅增加,資料以迅雷不及掩耳的速度大量傳入。無論是來自行動和 Web 應用程式的日誌資料、電子商務網站的購買資料,或是 IoT 裝置的感應器資料,這些資訊都能協助公司了解目前顧客、組織及業務的狀況。藉由即時查看這些抵達的資料,您可以即時監控自己的業務,並迅速把握新的商機,像是根據顧客在特定時間的所在位置提供促銷商品,或是監控社交情感和顧客態度的改變,以識別新的商機並採取行動。

如果要善用這些商機,您需要使用與過去處理靜態存放資料截然不同的一組分析工具,以收集和分析即時串流資料。使用傳統的分析,您要收集資訊、將資訊存放在資料庫,然後在幾小時、幾天或幾週後進行分析。即時資料的分析需要採用不同的方式及不同的工具和服務。串流分析平台會在資料存放到資料庫之前持續處理資料,而不是在存放的資料上執行資料庫查詢。串流資料以非常驚人的速度進行傳輸,隨時都可能上下變化。串流分析平台必須能夠在這類資料抵達時即時進行處理,速度通常是每小時百萬個事件。

問:Kinesis Analytics 可以用來做什麼?

您幾乎可在任何使用案例使用 Kinesis Analytics,包含持續地即時收集資料,以及想在幾秒或幾分鐘內獲得資訊和洞見,而不是等待幾天或甚至幾週的時間。Kinesis Analytics 尤其能讓您快速建置端對端的串流處理應用程式,以處理日誌分析、點擊流分析、物聯網 (IoT)、廣告技術、遊戲等等。三個最常用的模式是時間序列分析、即時儀表板,以及即時提醒和通知。

產生時間序列分析

時間序列分析可讓您監控和了解資料在一段時間內的趨勢。使用 Kinesis Analytics,您可以編寫 SQL 程式碼,以持續產生不同時段的時間序列分析。舉例來說,您可以每分鐘計算出最高分玩家,然後將資料傳送到 Amazon S3,為行動遊戲建立一個即時排行榜。或者,可以每五分鐘計算出您網站的獨特訪客數,然後將處理的結果傳送到 Amazon Redshift,以追蹤網站的流量。

饋送即時儀表板

您可以建置應用程式以計算查詢結果並將結果發送到即時儀表板,以近乎即時的速度建立視覺化資料。例如,應用程式可以持續計算商業指標,像是在電子商務網站購買的次數,依產品類別分組,然後將結果傳送到 Amazon Redshift,並使用您所選的商業智慧工具進行視覺化。再來看看另一個範例,應用程式處理日誌資料並計算應用程式錯誤數量,然後將結果傳送到 Amazon Elasticsearch Service,並使用 Kibana 進行視覺化。

建立即時提醒和通知

您可以建置在特定指標達到預定閾值時傳送即時警示或通知的應用程式,或者在更進階的案例中,您的應用程式使用我們提供的機器學習演算法偵測到異常時傳送即時警示或通知。例如,應用程式可以計算面向客戶 API 在一段時間後的可用性或成功率,然後將結果傳送到 Amazon CloudWatch。您可以建置另一個應用程式尋找滿足特定條件的事件,然後使用 Kinesis Streams 和 Amazon Simple Notification Service (SNS) 自動通知適當的客戶。

問:如何開始使用 Kinesis Analytics?

登入 Kinesis Analytics 主控台並建立新的串流處理應用程式。您也可以使用 AWS CLIAWS 開發套件。您可以透過三個簡單的步驟建置一個端對端應用程式:1) 設定傳入串流資料、2) 編寫您的 SQL 查詢,以及 3) 指向要載入結果的位置。Kinesis Analytics 可辨識 JSON、CSV 和 TSV 等標準資料格式,並自動建立一個基礎結構描述。您可以優化這個結構描述,或者,如果您的資料是非結構化資料,可使用我們的直覺式結構描述編輯器來定義一個新的結構描述。接著,服務會將結構描述套用到輸入串流,讓它看起來像是持續更新的 SQL 表,如此您即可針對它編寫標準 SQL 查詢。您可使用我們的 SQL 編輯器來建置查詢。SQL 編輯器隨附很多附加功能,包括對即時資料的語法檢查和測試。我們也為您提供範本,其中包含從簡單的串流篩選條件到進階異常偵測和 top-K 分析的 SQL 程式碼。Kinesis Analytics 會處理所有基礎設施的佈建和彈性地擴展以處理任何資料輸送量。您不需要規劃、佈建或管理基礎設施。

問:Kinesis Analytics 有哪些限制?

在大部分情況下,Kinesis Analytics 會彈性地擴展您的應用程式以應付來源串流的資料輸送量和查詢複雜性。然而,使用 Amazon Kinesis Analytics 時請謹記下列限制:

  • 每個記錄不得超過 50 KB。定義輸入結構描述時,可將大於 50 KB 的記錄分割成多個記錄。
  • 您可以在帳戶中,為每個 AWS 區域建立最多五個 Kinesis Analytics 應用程式。您可以透過提交提高服務限額表單提高此限制。
  • 您可能必須平行處理查詢,以跟上串流中的資料。若要這樣做,您可以指定輸入資料串流對應到最多 10 個應用程式內串流。
  • Kinesis 處理單元 (KPU) 的最大上限數為 8 個。
  • 您可以設定應用程式輸出,將結果維持在最多四個目的地。
  • 存放參考資料的 Amazon S3 物件大小最大可至 1 GB。

問:什麼是 Kinesis Analytics 應用程式?

應用程式是您所使用的 Kinesis Analytics 實體。Kinesis Analytics 應用程式可持續即時讀取和處理串流資料。您使用 SQL 編寫應用程式程式碼,以處理傳入的串流資料並產生輸出。接著,Kinesis Analytics 會將輸出寫入設定的目的地。

每個應用程式都由三個主要元件組成:

  • 輸入 – 應用程式的串流來源。在輸入設定中,您將串流來源對應到應用程式內輸入串流。應用程式內串流就像一個會持續更新的表格,您可以在該表格執行 SELECT 和 INSERT SQL 操作。每個輸入記錄都有一個關聯的結構描述,將記錄插入到應用程式內串流時會套用該結構描述。
  • 應用程式的程式碼 – 用來處理輸入和產生輸出的一系列 SQL 陳述式。應用程式程式碼最簡單的形式可以是單一 SQL 陳述式,可從串流輸入進行選取,然後將結果插入串流輸出。它也可以是一系列的 SQL 陳述式,可將一個 SQL 陳述式的輸出饋送到下一個 SQL 陳述式的輸入。不僅如此,您還可以編寫應用程式程式碼將一個輸入串流分割成多個串流,然後套用其他查詢來處理這些個別的串流。 
  • 輸出 – 您可以建立一或多個應用程式內串流來保存中繼結果。您之後可以選擇性地設定應用程式輸出,將特定應用程式內串流中的資料保留到外部目的地。 

問:什麼是應用程式內串流?

應用程式內串流是持續將資料存放到應用程式的實體,以執行 SELECT 和 INSERT SQL 操作。您與應用程式內串流互動的方式就和與 SQL 表互動的方式一樣。不過,串流與表格不同,其資料會持續的更新。在應用程式的程式碼中,您可以建立其他應用程式內串流來存放中繼查詢結果。最後,您設定的輸入和輸出在應用程式中是以應用程式內串流的形式呈現。

問:Kinesis Analytics 應用程式支援哪些輸入?

Kinesis Analytics 支援兩種類型的輸入:串流資料來源和參考資料來源。串流資料來源是持續產生的資料,您的應用程式會讀取該資訊以進行處理。參考資料來源是靜態資料,應用程式使用它們讓從串流來源傳入的資料更豐富。每個應用程式不得有一個以上的串流資料來源和一個以上的參考資料來源。應用程式持續讀取和處理來自串流資料來源的新資料,包括 Amazon Kinesis Streams 或 Amazon Kinesis Firehose。應用程式讀取整個參考資料來源 (包括 Amazon S3),以透過 SQL JOIN 讓串流資料來源更豐富。

問:什麼是參考資料來源?

參考資料來源是靜態資料,應用程式使用它們讓從串流來源傳入的資料更豐富。您以物件的形式將參考資料存放在 S3 儲存貯體中。在應用程式啟動的時候,Kinesis Analytics 會讀取 S3 物件並建立一個應用程式內 SQL 表來存放參考資料。之後,您的應用程式程式碼就能將它與應用程式內串流結合在一起。您可以呼叫 UpdateApplication API 以更新 SQL 表中的資料。

問:支援哪種應用程式程式碼?

Kinesis Analytics 支援 ANSI SQL 和一些 SQL 標準的延伸模組,可讓您更輕鬆地使用串流資料。此外,Kinesis Analytics 還提供數個以 SQL 函數公開的機器學習演算法,包括異常偵測、預估 top-K 及預估不同的項目。

問:支援哪些目的地?

Kinesis Analytics 支援每個應用程式最多四個目的地。您可以將 SQL 結果保留到 Amazon S3、Amazon Redshift 和 Amazon Elasticsearch Service (透過 Amazon Kinesis Firehose) 以及 Amazon Kinesis Streams。您可以寫入 Kinesis Analytics 不直接支援的目的地,方法是將 SQL 結果傳送到 Amazon Kinesis Streams,然後利用它與 AWS Lambda 的整合傳送到您所選的目的地。


問:如何設定串流資料來源?

串流資料來源可以是 Amazon Kinesis 串流或 Amazon Kinesis Firehose 交付串流。Kinesis Analytics 應用程式可在資料抵達時從串流資料來源持續地即時讀取新的資料。資料透過應用程式串流在 SQL 程式碼中提供使用。應用程式內串流與 SQL 表的功能類似,因為您可以建立、插入以及從串流中選取項目。不過,它們的差別在於應用程式內串流是持續地以串流資料來源的新資料進行更新。

您可以使用 AWS 管理主控台新增串流資料來源。您可以從 Kinesis Analytics Developer GuideConfiguring Application Input 部分進一步了解來源。

問:如何設定參考資料來源?

參考資料來源可以是 Amazon S3 物件。您的 Kinesis Analytics 應用程式在開始執行時會讀取整個 S3 物件。資料透過表格在 SQL 程式碼中提供使用。使用參考資料來源的最常用案例是使用 SQL JOIN 讓來自串流資料來源的資料更豐富。

您可以使用 AWS CLI 指定 S3 儲存貯體、物件、IAM 角色及關聯的結構描述來新增參考資料來源。Kinesis Analytics 會在您啟動應用程式的時候載入此資料,並在每次發出任何更新 API 呼叫時重新載入資料。

問:支援哪些資料格式:

Kinesis Analytics 使用 DiscoverInputSchema API 偵測結構描述並自動剖析 UTF-8 編碼的 JSON 和 CSV 記錄。這個結構描述會在插入應用程式內串流時套用到從串流讀取的資料。

對於不使用分隔符號和使用與 CSV 不同之分隔符號的其他 UTF-8 編碼資料,或是在探索 API 無法完全探索結構描述的情況下,您可以使用互動式結構描述編輯器定義結構描述,或使用字串操作函數來結構化資料。如需詳細資訊,請參閱 Kinesis Analytics Developer Guide 中的 Using the Schema Discovery Feature and Related Editing

問:輸入串流如何公開到 SQL 程式碼?

Kinesis Analytics 會套用您指定的結構描述,在串流來源將資料插入一或多個應用程式內串流,並在參考來源插入單一 SQL 表。應用程式內串流的預設數目是可滿足您大部分使用案例需求的數目。如果您發現應用程式無法跟上 CloudWatch 指標 MillisBehindLatest 定義的來源串流的最新資料,則應該提高此數目。所需的應用程式內串流數目會同時受到來源串流輸送量與查詢複雜性的影響。指定對應到來源串流的應用程式內串流數的參數稱為輸入平行度。


問:應用程式的程式碼看起來是什麼樣子?

應用程式的程式碼是用來處理輸入和產生輸出的一系列 SQL 陳述式。這些 SQL 陳述式在應用程式內串流和參考表格上操作。應用程式內串流就像一個會持續更新的表格,您可以在該表格執行 SELECT 和 INSERT SQL 操作。您設定的來源和目的地會透過應用程式內串流公開到 SQL 程式碼。您也可以建立其他應用程式內串流以存放中繼查詢結果。

您可以使用下列模式來使用應用程式內串流:

  • 一律在 INSERT 陳述式內使用 SELECT 陳述式。當您選取列時,會將結果插入另一個應用程式內串流。
  • 在幫浦內使用 INSERT 陳述式。您可以使用幫浦讓 INSERT 陳述式持續並寫入應用程式內串流。
  • 您使用幫浦將應用程式內串流綁在一起,從一個應用程式內串流選取,並插入另一個應用程式內串流。 

下列 SQL 程式碼提供一個簡單、可運作的應用程式:

CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (

    ticker_symbol VARCHAR(4),

    change DOUBLE,

    price DOUBLE);

 

CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM    

    SELECT STREAM ticker_symbol, change, price    

    FROM "SOURCE_SQL_STREAM_001";

如需應用程式程式碼的詳細資訊,請參閱 Kinesis Analytics Developer Guide 中的 Application Code

問:Kinesis Analytics 如何協助我編寫 SQL 程式碼?

Kinesis Analytics 包含常用案例的分析範本庫,包括串流篩選、輪轉時段及異常偵測。您可以在 AWS 管理主控台中從 SQL 編輯器存取這些範本。建立應用程式並瀏覽到 SQL 編輯器之後,即可在主控台左上角使用範本。

問:如何在 Kinesis Analytics 中執行即時異常偵測?

Kinesis Analytics 針對數個進階分析加入了預先建置的 SQL 函數,其中一個就用於異常偵測。您只需要從 SQL 程式碼呼叫此函數,就能即時偵測異常。Kinesis Analytics 使用 Random Cut Forest 演算法來實作異常偵測。如需 Random Cut Forests 的詳細資訊,請參閱 Streaming Data Anomaly Detection 白皮書


問:如何設定目的地?

在應用程式的程式碼中,將 SQL 陳述式的輸出寫入一或多個應用程式內串流。您可以選擇在應用程式新增輸出組態,將寫入特定應用程式串流的所有物件保留到最多四個外部目的地。這些外部目的地可以是 Amazon S3 儲存貯體、Amazon Redshift 表、Amazon Elasticsearch 網域 (透過 Amazon Kinesis Firehose) 和 Amazon Kinesis 串流。每個應用程式支援最多四個目的地,可以是上述任意組合。如需詳細資訊,請參閱 Kinesis Analytics Developer Guide 中的 Configuring Output Streams

問:不直接支援我慣用的目的地。我該如何將 SQL 結果傳送到此目的地?

您可以使用 AWS Lambda 寫入未直接支援使用的目的地。我們建議您將結果寫入 Amazon Kinesis 串流,然後使用 AWS Lambda 讀取處理的結果,並將它傳送到所選的目的地。如需詳細資訊,請參閱 Kinesis Analytics Developer Guide 中的 Example: AWS Lambda Integration。或者,您可以使用 Amazon Kinesis Firehose 交付串流將資料載入 Amazon S3,然後觸發 AWS Lambda 函數以讀取該資料,並將它傳送到您所選的目的地。如需詳細資訊,請參閱 AWS Lambda Developer Guide 中的 Using AWS Lambda with Amazon S3

問:Kinesis Analytics 提供哪種交付模型?

Kinesis Analytics 使用「至少使用一次」交付模型,將應用程式輸出到設定的目的地。Kinesis Analytics 應用程式採用內部檢查點,它們是將輸出記錄交付到目的地的時間點,且無資料遺失。服務視需要使用檢查點以確保應用程式輸出至少一次交付到設定的目的地。如需交付模型的詳細資訊,請參閱 Kinesis Analytics Developer Guide 中的 Configuring Application Output


問:如何監控 Kinesis Analytics 應用程式的操作和效能?

AWS 提供可用來監控 Kinesis Analytics 應用程式的各種工具。您可以設定其中一些工具來協助您進行監控。如需如何監控應用程式的詳細資訊,請參閱 Kinesis Analytics Developer Guide 中的 Monitoring Kinesis Analytics

問:如何管理和控制對 Kinesis Analytics 應用程式的存取權限?

Kinesis Analytics 需要許可才可從應用程式指定的串流資料來源讀取記錄。Kinesis Analytics 還需要許可,才能將應用程式輸出寫入應用程式輸出組態中指定的串流。建立 Kinesis Analytics 可以擔任的 IAM 角色即可授予這些許可。您授予此角色的許可決定了當服務擔任角色時 Kinesis Analytics 可以執行的動作。如需詳細資訊,請參閱 Kinesis Analytics Developer Guide 中的 Granting Permissions

問:Kinesis Analytics 如何擴展我的應用程式?

在大部分情況下,Kinesis Analytics 會彈性地擴展您的應用程式以應付來源串流的資料輸送量和查詢複雜性。Kinesis Analytics 以 Amazon Kinesis 處理單元 (KPU) 的形式佈建容量。單一 KPU 可提供記憶體 (4 GB) 及對應的運算和聯網。
每個串流來源會映射到一個對應的應用程式內串流。雖然對許多客戶來說這不是必要的,但是指定輸入平行度參數來提高來源對應的應用程式內串流數目,可以更有效率的使用 KPU。Kinesis Analytics 會將串流資料來源的分區 (如 Amazon Kinesis 串流的碎片) 平均指派到您指定的應用程式內串流數目。舉例來說,如果您使用一個包含 10 個碎片的 Amazon Kinesis 串流做為串流資料來源,且您將輸入平行度指定為 2,則 Kinesis Analytics 會個別指派五個 Amazon Kinesis 碎片到兩個名為 "SOURCE_SQL_STREAM_001" 和 "SOURCE_SQL_STREAM_002" 的應用程式內串流。如需詳細資訊,請參閱 Kinesis Analytics Developer Guide 中的 Configuring Application Input

問:建置和管理 Kinesis Analytics 應用程式的相關最佳實務為何?

如需最佳實務的詳細資訊,請參閱 Kinesis Analytics Developer Guide 中的 Best Practices 部分,其中涵蓋管理應用程式、定義輸入結構描述、連線到輸出,以及編寫應用程式程式碼等內容。


問:如何讓特定 SQL 陳述式正常運作?

如需詳細資訊,請參閱 Kinesis Analytics Developer Guide 中的 Example Applications,其中有一些可用的 SQL 範例。此外,Kinesis Analytics SQL Reference 也提供編寫串流 SQL 陳述式的詳細指導。如果您仍然無法解決問題,建議您在 Amazon Kinesis 論壇上提問。

問:Kinesis Analytics 無法偵測或找到我的結構描述。該如何使用 Kinesis Analytics 呢?

對於不使用分隔符號和使用與 CSV 不同之分隔符號的其他 UTF-8 編碼資料,或是在探索 API 無法完全探索結構描述的情況下,您可以手動定義結構描述或使用字串操作函數來結構化資料。如需詳細資訊,請參閱 Kinesis Analytics Developer Guide 中的 Using the Schema Discovery Feature and Related Editing

問:我應該監控哪些重要的參數以確保應用程式可以正常運作?

要監控的最重要參數是 CloudWatch 指標 MillisBehindLatest,它代表相較於目前的時間,從串流讀取的進度落後多少。這個指標提供一個有效的機制,可判斷從來源串流處理記錄的速度是否夠快。您應該設定在落後一小時以上時觸發 CloudWatch 警示 (這個時間取決於使用案例,且可視需要調整)。您可在 Kinesis Analytics Developer Guide 中的 Best Practices 部分進一步了解更多資訊。

問:執行 Kinesis Analytics 應用程式時,如何對無效程式碼錯誤進行故障排除?
如需無效程式碼錯誤及為 Kinesis Analytics 應用程式進行故障排除的相關資訊,請參閱 Amazon Kinesis Analytics Developer Guide 中的 Troubleshooting


問:Kinesis Analytics 的費用是多少?

使用 Kinesis Analytics,您只需按實際用量付費。我們會根據您執行串流處理應用程式所使用的 Kinesis 處理單元 (或 KPU) 平均數量,以小時費率進行收費。我們會進位到最接近的 KPU 整數。

單一 KPU 是一個串流處理資源,由記憶體 (4 GB)、運算 (1 個 vCPU) 及對應的聯網功能組成。因為串流應用程式的記憶體和運算耗用量在處理期間會有變化,所以 Kinesis Analytics 會依照串流工作負載自動彈性地擴展 KPU 的數目。使用 Kinesis Analytics 不需要佈建資源、沒有預付費用或最低費用。

如需定價的詳細資訊,請參閱 Kinesis Analytics 定價頁面

問:Kinesis Analytics 是否可用於 AWS 免費方案?

否。AWS 免費方案目前不包括 Kinesis Analytics。AWS 免費方案是提供一組 AWS 服務免費試用的計劃。

問:使用執行中但未處理任何來源資料的 Kinesis Analytics 應用程式是否需要付費?

如果您的 Kinesis Analytics 應用程式正在執行,只會向您收取一個 KPU 的最低費用。

問:除了 Kinesis Analytics 費用以外,還會產生任何其他費用嗎?

Kinesis Analytics 是全受管的串流處理解決方案,與讀取資料的串流來源及寫入處理資料的目的地沒有關係。我們會單獨計算與您輸入和輸出串流相關的 Kinesis Firehose 和 Kinesis Streams 用量費用。

問:Kinesis Analytics 與使用 Amazon Kinesis Client Library 執行我自己的應用程式有何不同?

Amazon Kinesis Client Library (KCL) 是一個預先建置的程式庫,可協助您建置取用者應用程式,以讀取和處理來自 Amazon Kinesis 串流的資料。KCL 可處理複雜的問題,例如適應串流量的變化、負載平衡串流資料、協調分散式服務和利用容錯能力處理資料。KCL 讓您能夠在建置應用程式時將焦點擺在商業邏輯。

使用 Kinesis Analytics,您可以處理和查詢即時的串流資料。您使用標準 SQL 來處理資料串流,且不必學習任何新的程式設計語言。您只需要將 Kinesis Analytics 指向傳入的資料串流、編寫 SQL 查詢,然後指定要載入結果的位置。Kinesis Analytics 使用 KCL 做為基礎應用程式的一部分,從串流資料來源讀取資料。服務會為您免除這部分的工作,以及許多與使用 KCL 有關較為複雜的概念,如插入檢查點。

如果您想要使用全受管解決方案且希望使用 SQL 來處理串流的資料,則應該使用 Kinesis Analytics。如果您需要建置自訂處理解決方案,但 Kinesis Analytics 未能符合其需求,而且您有能力管理所建置的取用者應用程式,請使用 KCL。