一般

問:什麼是 Amazon Kinesis Data Streams?

Amazon Kinesis Data Streams 可讓您建置自訂的應用程式以處理或分析串流資料,滿足您的專業需求。您可以從數十萬個來源持續將點擊流、應用程式日誌和社交媒體等各種資料類型新增到 Amazon Kinesis 資料串流。您的 Amazon Kinesis 應用程式在幾秒鐘內就可以從串流讀取和處理資料。

問:Amazon Kinesis Data Streams 可代我管理哪些項目?

Amazon Kinesis Data Streams 可管理在資料輸送量層級串流處理資料所需的基礎設施、儲存、聯網和設定。您無須顧慮資料串流的軟硬體佈建、部署、持續維護或其他服務方面的問題。此外,Amazon Kinesis Data Streams 還可在三個可用區域同步複製資料,以提供高可用性和資料耐久性。

問:Amazon Kinesis Data Streams 可以用來做什麼?

如果需要將資料從資料生產者快速移出再繼續處理,Amazon Kinesis Data Streams 就非常實用,因為它會先轉換資料,再發送到資料存放區、執行即時指標和分析,或衍生更複雜的串流以用於進一步處理。以下是使用 Amazon Kinesis Data Streams 的典型案例:

  • 加速日誌和資料饋送投入:您無須等待批次處理資料,而是讓資料生產者在產生資料之後就立即推送到 Amazon Kinesis 資料串流,防止因資料生產者出現故障導致的資料損失。例如,系統和應用程式日誌可以持續新增到資料串流,並可在數秒內進行處理。
  • 即時指標和報告:您可以即時從 Amazon Kinesis 資料串流資料擷取指標並產生報告。例如,您的 Amazon Kinesis 應用程式可以在資料串流進入時處理系統和應用程式日誌的指標和報告,不需等待接收批次資料。
  • 即時資料分析:透過 Amazon Kinesis Data Streams,您可以執行即時串流資料分析。例如,您可以將點擊流新增到 Amazon Kinesis 資料串流,並讓 Amazon Kinesis 應用程式即時執行分析,就可以在數分鐘內從資料獲得重要見解,而無須數小時或數天時間。
  • 複雜的串流處理:您可以建立 Amazon Kinesis 應用程式資料串流的 Directed Acyclic Graphs (DAG)。在此案例中,一或多個 Amazon Kinesis 應用程式可將資料新增到另一個 Amazon Kinesis 資料串流做進一步處理,以便進行串流處理的後續階段。

問:如何使用 Amazon Kinesis Data Streams?

註冊 Amazon Web Services 後,就可以透過以下步驟開始使用 Amazon Kinesis Data Streams:

問:Amazon Kinesis Data Streams 有哪些限制?

透過增加資料串流內的碎片數量,Amazon Kinesis 資料串流的輸送量能夠無限擴展。然而,使用 Amazon Kinesis Data Streams 時有一些限制需謹記在心:

  • 預設情況下,您可以在串流的記錄新增到串流的 24 小時內存取記錄。您可以透過延長資料保留時間,增加最多達 7 天的時間限制。
  • 一筆記錄內的資料 Blob 大小上限 (Base64 編碼之前的資料承載) 是 1 百萬位元組 (MB)。
  • 每個碎片最高可支援每秒 1000 次 PUT 記錄。

如需其他 API 層級限制的詳細資訊,請參閱 Amazon Kinesis Data Streams 限制

問:Amazon Kinesis Data Streams 與 Amazon SQS 有何不同?

Amazon Kinesis Data Streams 可即時處理大數據的串流。它提供記錄排序,也提供對多個 Amazon Kinesis 應用程式以相同順序讀取和/或重新顯示記錄的能力。Amazon Kinesis Client Library (KCL) 能夠將指定分區索引鍵的所有記錄交付給相同記錄處理器,讓它更輕鬆地建置從相同 Amazon Kinesis 資料串流讀取資料的多個應用程式 (例如,執行計數、彙總和篩選)。

Amazon Simple Queue Service (Amazon SQS) 提供一個可靠、可高度擴展且完全託管的佇列,以存放在電腦之間傳輸的訊息。Amazon SQS 讓您能夠在分散式應用程式元件之間輕鬆移動資料,並協助您建置可以單獨處理訊息的應用程式 (使用訊息層級確認/失敗語義),如自動工作流程。

問:Amazon Kinesis Data Streams 和 Amazon SQS 的使用時機分別為何?

我們建議將 Amazon Kinesis Data Streams 用於有類似以下要求的使用案例:

  • 將相關記錄路由到相同記錄處理器 (如串流處理 MapReduce)。例如,當指定索引鍵的所有記錄都路由到相同記錄處理器時,計數和彙總較為簡單。
  • 記錄的排序。例如,您希望將日誌資料從應用程式主機傳輸到處理/存檔主機,同時保持日誌報表的順序。
  • 多個應用程式並行使用相同串流的能力。例如,您有一個更新即時儀表板的應用程式,還有另一個將資料存檔到 Amazon Redshift 的應用程式。您希望這兩個應用程式並行且獨立地使用相同串流的資料。
  • 在數小時之後以相同順序使用記錄的能力。例如,您有一個帳單應用程式,以及一個在帳單應用程式執行之後數小時才執行的稽核應用程式。因為 Amazon Kinesis Data Streams 儲存資料的時間最長為 7 天,所以您可在帳單應用程式之後的 7 天內執行稽核應用程式。

我們建議將 Amazon SQS 用於具有類似以下要求的使用案例:

  • 簡訊語義 (如訊息層級確認/失敗) 和可見性逾時。例如,您有一個工作項目佇列,而希望單獨追蹤每個項目的成功完成情況。Amazon SQS 可追蹤確認/失敗,因此應用程式無須維護持久性檢查點/游標。在設定的可見性逾時後,Amazon SQS 會刪除已確認的訊息,並重新交付失敗的訊息。
  • 個別的訊息延遲。例如,您有一個任務佇列,且需要排定含延遲的個別任務。您可以透過 Amazon SQS 將個別訊息設定為最多 15 分鐘的延遲。
  • 動態增加讀取時間的並行/輸送量。例如,您有一個工作佇列,且希望新增更多閱讀器,直到待處理項目清除為止。透過 Amazon Kinesis Data Streams,您可以擴展到足夠的碎片數量 (但請注意,您將需要提前佈建足夠的碎片)。
  • 利用 Amazon SQS 通透擴展的能力。例如,由於業務的偶爾負載尖峰或自然增長,您有緩衝請求和負載變更。因為每個緩衝的請求可以單獨處理,因此 Amazon SQS 可以通透地擴展以處理負載,無須您提供任何佈建指示。

主要概念

問:什麼是碎片?

碎片是 Amazon Kinesis 資料串流傳輸的基本輸送量單位。一個碎片提供 1 MB/秒資料輸入和 2 MB/秒資料輸出容量。一個碎片最高可支援每秒 1000 次 PUT 記錄。建立資料串流時,您要指定所需的碎片數量。例如,您可以建立具有兩個碎片的資料串流。此資料串流具有 2 MB/秒資料輸入和 4 MB/秒資料輸出的輸送量,並允許每秒最多 2000 個 PUT 記錄。您可以在 Amazon Kinesis Data Streams 監控碎片層級的指標,並在資料輸送量變更時,透過重新碎片資料串流,動態新增碎片到資料串流或從資料串流移除碎片。

問:什麼是記錄?

記錄是儲存在 Amazon Kinesis 資料串流中的資料單位。記錄由序號、分區索引鍵和資料 Blob 組成。資料 Blob 是您的資料生產者新增到資料串流的重要資料。資料 Blob 的大小上限 (Base64 編碼前的資料承載) 是 1 百萬位元組 (MB)。

問:什麼是分區索引鍵?

分區索引鍵是用於分隔和路由記錄到不同的資料串流碎片。分區索引鍵是由您的資料生產者在新增資料到 Amazon Kinesis 資料串流時指定。例如,假設您的資料串流有兩個碎片 (碎片 1 和碎片 2)。您可以將資料生產者設定為使用兩個分區索引鍵 (索引鍵 A 和索引鍵 B),讓所有含索引鍵 A 的記錄新增到碎片 1,而所有含索引鍵 B 的記錄新增到碎片 2。

問:什麼是序號?

序號是每個記錄的唯一識別符。序號是資料生產者呼叫 PutRecord 或 PutRecords 操作以新增資料到 Amazon Kinesis 資料串流時,由 Amazon Kinesis 所指派。相同分區索引鍵的序號通常會隨時間增加PutRecordPutRecords 請求之間的時段越長,序號就會變得越大。

建立資料串流

問:如何建立 Amazon Kinesis 資料串流?

您註冊 Amazon Web Services 後,就可以透過 Amazon Kinesis 管理主控台CreateStream 操作建立 Amazon Kinesis 資料串流。

問:如何決定 Amazon Kinesis 資料串流的輸送量?

Amazon Kinesis 資料串流的輸送量是由資料串流內的碎片數量決定。請依照以下步驟估計資料串流需要的初始碎片數量。請注意,您可以透過重新碎片來動態調整資料串流中的碎片數量。

  1. 以千位元組 (KB) 為單位,預估寫入資料串流的記錄平均大小,然後四捨五入到最接近的 1 KB (average_data_size_in_KB)。
  2. 預估每秒寫入資料串流的記錄數量。(number_of_records_per_second)
  3. 決定並行且獨立從資料串流使用資料的 Amazon Kinesis 應用程式數量。(number_of_records_per_second)
  4. 以 KB 為單位,計算傳入的寫入頻寬 (incoming_write_bandwidth_in_KB),這相當於 average_data_size_in_KB 乘以 number_of_records_per_seconds。
  5. 以 KB 為單位,計算傳出的讀取頻寬 (outgoing_read_bandwidth_in_KB),這相當於 incoming_write_bandwidth_in_KB 乘以 number_of_consumers。

然後您可以使用以下公式計算資料串流需要的初始碎片數量 (number_of_shards):

number_of_shards = max (incoming_write_bandwidth_in_KB/1000, outgoing_read_bandwidth_in_KB/2000)

問:可為 Amazon Kinesis 資料串流請求的最小輸送量是多少?

Amazon Kinesis 資料串流的輸送量是依碎片單位擴展。單一碎片是資料串流的最小輸送量,提供 1 MB/秒資料輸入和 2 MB/秒資料輸出。

問:可為 Amazon Kinesis 資料串流請求的最大輸送量是多少?

Amazon Kinesis 資料串流的輸送量可無限擴展。在預設情況下,每個帳戶可為每個區域佈建 10 個碎片。您可以使用 Amazon Kinesis Data Streams 限制表單為單一區域請求超過 10 個碎片。

問:記錄大小如何影響 Amazon Kinesis 資料串流的輸送量?

由於碎片每秒提供 1MB/秒的資料輸入速率且支援多達 1000 次PUT 記錄,因此,如果記錄大小不到 1 KB,則碎片的實際輸入速率將小於 1 MB/秒,這受到每秒最大 PUT 記錄的限制。

將資料新增到 Kinesis Data Streams

問:如何將資料新增到 Amazon Kinesis 資料串流?

您可以透過 PutRecordPutRecords 操作 Amazon Kinesis Producer Library (KPL)Amazon Kinesis 代理器,將資料新增到 Amazon Kinesis 資料串流。

問:PutRecord 和 PutRecords 有什麼差別?

PutRecord 操作允許 API 呼叫內的單一資料記錄,而 PutRecords 操作允許 API 呼叫內的多個資料記錄。如需有關 PutRecord 和 PutRecords 操作的詳細資訊,請參閱 PutRecordPutRecords

問:什麼是 Amazon Kinesis Producer Library (KPL)?

Amazon Kinesis Producer Library (KPL) 是易於使用且高度可設定的程式庫,可協助您將資料放入 Amazon Kinesis 資料串流。KPL 提供一個簡單、非同步且可靠的界面,讓您能夠以最少的用戶端資源快速實現高生產者輸送量。

問:可以使用哪些程式設計語言或平台存取 Amazon Kinesis API?

Amazon Kinesis API 是在 Amazon Web Services SDK 中提供。如需有關 Amazon Web Services SDK 的程式設計語言或平台的清單,請參閱適用於 Amazon Web Services 的工具

問:Amazon Kinesis Producer Library (KPL) 可使用哪些程式設計語言?

Amazon Kinesis Producer Library (KPL) 的核心是以 C++ 模組建置,可以編譯成搭配最新 C++ 編譯器在任何平台上工作。此程式庫目前以 Java 界面提供。我們希望加入其他程式設計語言的支援。

問:什麼是 Amazon Kinesis 代理器?

Amazon Kinesis 代理器是預先建置的 Java 應用程式,可讓您輕鬆收集資料並將資料傳送至 Amazon Kinesis 資料串流。您可以在以 Linux 為基礎的伺服器環境 (例如 Web 伺服器、日誌伺服器及資料庫伺服器) 安裝代理器。代理器會監控特定檔案並持續將資料傳送至您的資料串流。如需詳細資訊,請參閱 Writing with Agents

問:Amazon Kinesis 代理器支援何種平台?

Amazon Kinesis 代理器目前支援 Amazon Linux 或 Red Hat Enterprise Linux。

問:哪裡可以取得 Amazon Kinesis 代理器?

您可以使用以下命令和連結來下載和安裝 Amazon Kinesis 代理器:

在 Amazon Linux 上:sudo yum install –y aws-kinesis-agent

在 Red Hat Enterprise Linux 上:sudo yum install –y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn1.noarch.rpm

從 GitHub:awlabs/amazon-kinesis-agent

問:如何使用 Amazon Kinesis 代理器?

在伺服器上安裝 Amazon Kinesis 代理器之後,您可以設定它來監控磁碟上的特定檔案,然後持續將新資料傳送到您的 Amazon Kinesis 資料串流。如需詳細資訊,請參閱 Writing with Agents

問:如果資料生產者將資料新增到資料串流時超過 Amazon Kinesis 資料串流的容量限制,會發生什麼情況?

Amazon Kinesis 資料串流的容量限制由資料串流內的碎片數量定義。資料輸送量或 PUT 記錄的數量可能會超過限制。在超過容量限制時,輸入資料呼叫將以 ProvisionedThroughputExceeded 例外狀況被拒絕。如果這是因為臨時的資料串流輸入資料速率增加所導致,則資料生產者會重試到最終完成請求。如果這是因為持續的資料串流輸入資料速率增加所導致,則應增加資料串流內的碎片數量,以提供足夠容量來持續地成功執行輸入資料呼叫。在這兩種情況下,Amazon CloudWatch 指標都能讓您了解資料串流輸入資料速率的變化,以及 ProvisionedThroughputExceeded 例外狀況的出現。

問:在 PutRecord 或 PutRecords 呼叫期間,哪些資料計入 Amazon Kinesis 資料串流的資料輸送量?

您的資料 Blob、分區索引鍵和資料串流名稱是 PutRecordPutRecords 呼叫的必要參數。您的資料 Blob (Base64 編碼之前) 和分區索引鍵大小將計入 Amazon Kinesis 資料串流的資料輸送量,這是由資料串流內的碎片數量決定。

增強型散發

問:什麼是增強型散發?

增強型散發是適用於 Kinesis Data Streams 取用者的選擇性功能,可在消費者和碎片之間提供 2 MB/秒輸送量邏輯管道。這可讓客戶從資料串流並行讀取的取用者數目,同時維持高效能。

問:取用者如何使用增強型散發?

取用者必須先向 Kinesis Data Streams 服務註冊。依預設,取用者註冊會啟用增強型散發。如果您使用 KCL,KCL 2.x 版負責自動註冊您的取用者,並使用 KCL 應用程式的名稱作為取用者名稱。註冊後,所有註冊的取用者將具有針對他們佈建的專用邏輯增強型散發。然後,取用者使用 HTTP/2 SubscribeToShard API 在這些輸送量管道內擷取資料。HTTP/1 GetRecords API 目前不支援增強型散發,因此,您將需要升級至 KCL 2.x,或註冊您的取用者,並讓取用者叫用 SubscribeToShard API。

問:取用者如何利用增強型散發?

取用者透過使用 SubscribeToShard API 擷取資料來利用增強型散發。SubscribeToShard API 內會使用已註冊取用者的名稱,因而會利用提供給已註冊取用者的增強型散發優勢。

問:何時應使用增強型散發?
如果您具有、或應具有從某個串流並行擷取資料的多個取用者,或如果您有至少一個取用者需要使用 SubscribeToShard API 來在生產者和取用者之間提供亞 200 毫秒的資料交付速度。

問:我可以讓一些取用者使用增強型散發,而其他取用者不使用嗎?

是,您可以讓多個取用者使用增強型散發,讓其他取用者不同時使用增強型散發。使用增強型散發不會影響傳統 GetRecords 使用的碎片限制。

問:在指定串流上使用增強型散發的取用者數目是否有限制?

預設限制為每個資料串流 5 個使用增強型散發的取用者。如果您需要 5 個以上,請透過 AWS Support 請求提高限額。請謹記,您總共可以有 5 個取用者從串流進行讀取,5 個取用者使用增強型散發,其他取用者不同時使用增強型散發。

問:取用者如何註冊以使用增強型散發和 HTTP/2 SubscribeToShard API?

建議使用 KCL 2.x,它會自動註冊您的取用者並同時使用增強型散發和 HTTP/2 SubscribeToShard API。否則,您可以使用 RegisterStreamConsumer API 手動註冊取用者,然後可以透過您註冊的取用者名稱使用 SubscribeToShard API。

問:是否會存在與使用增強型散發相關聯的費用?

是,除了擷取的每 GB 存在資料擷取費用,串流中的每種碎片和註冊使用增強型散發的取用者 (取用者碎片時數) 的組合會產生隨需小時費用。如需更多詳細資料,請參閱 Kinesis Data Streams 定價頁面

問:如何計算取用者碎片時數?

取用者碎片時數可透過將註冊的串流取用者數目乘以串流中的碎片數目來計算。例如,如果取用者碎片時數費用為 0.015 USD,對於 10 個碎片資料串流,使用增強型散發的此取用者將能夠從 10 個碎片讀取,因此每小時產生取用者碎片時數費用 0.15 USD (1 個取用者 x 10 個碎片 x 每取用者碎片小時 0.015 USD)。如果有兩個註冊同時使用增強型散發的取用者,取用者碎片時數總費用將為每小時 0.30 USD (2 個取用者 x 10 個碎片 x 0.015)。

問:如果我在 1 個小時內終止啟動取用者,對增強型散發的取用者碎片時數計費會自動按比例計算嗎?

是,您將僅支付取用者註冊使用增強型散發的按比例計算的小時部分。

問:針對增強型散發資料擷取的計費如何運作?

您支付使用增強型散發的取用者擷取的每位元組資料計量的較低的每 GB 費率。沒有承載綜述或交付最低值。

問:我是否需要變更生產者或資料串流來使用增強型散發?

否,可以在不影響資料生產者或資料串流的情況下啟用增強型散發。

讀取和處理來自 Kinesis Data Streams 的資料

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

Amazon Kinesis 應用程式是讀取和處理來自 Amazon Kinesis 資料串流資料的資料消費者。您可以使用 Amazon Kinesis Data AnalyticsAmazon Kinesis APIAmazon Kinesis Client Library (KCL) 來建置應用程式。

問:什麼是 Amazon Kinesis Client Library (KCL)?

適用於 Java | Python | Ruby | Node.js | .NET 的 Amazon Kinesis Client Library (KCL) 是一個預先建置的程式庫,可協助您輕鬆建置 Amazon Kinesis 應用程式,以用於讀取和處理來自 Amazon Kinesis 資料串流的資料。

KCL 可處理複雜的問題,例如適應資料串流量的變化、負載平衡串流資料、協調分散式服務和利用容錯能力處理資料。KCL 讓您能夠在建置應用程式時將焦點擺在商業邏輯。KCL 2.x 支援 HTTP/1 GetRecords 和 HTTP/2 SubscribeToShard API 搭配增強型散發來從串流擷取資料。KCL 1.x 不支援 SubscribeToShard API 或增強型散發。

問:我如何從 KCL 1.x 升級至 2.x 來使用 SubscribeToShard 和增強型散發?

瀏覽 Kinesis Data Streams 使用者文件來瞭解如何從 KCL 1.x 升級至 KCL 2.x。

問:什麼是 SubscribeToShard API?

SubscribeToShard API 是一種高效能串流 API,可透過持續性連線將資料從碎片推送給取用者,而無需客戶端的要求週期。SubscribeToShard API 使用 HTTP/2 通訊協定,在有新資料到達碎片時即傳送資料給註冊的取用者,通常在 70毫秒內,傳送速度與 GetRecords API 快大約 65%。即使在多個註冊的取用者從同一碎片讀取,取用者也能享受快速傳送。

問:我可以在不使用增強型散發的情況下使用 SubscribeToShard 嗎?

否,SubscribeToShard 需要使用增強型散發,這意味著您還需要向 Kinesis Data Streams 服務註冊您的取用者,才能使用 SubscribeToShard。

問: SubscribeToShard 持續性連線可以持續多久?

持續型連線可持續最多 5 分鐘。

問:Kinesis Client Library (KCL) 是否支援SubscribeToShard?

是,KCL 2.x 版使用 SubscribeToShard 和增強型散發以高效能從 Kinesis Data Stream 擷取資料。

問:是否存在與使用 SubscribeToShard 相關的費用?

否,沒有與 SubscribeToShard 關聯的額外費用,但是您必須搭配使用 SubscribeToShard 和增強型散發,其會對每個取用者碎片組合和增強型散發傳遞的每 GB 資料收取額外的小時費用。

問:如果我想要使用SubscribeToShard,我是否需要使用 增強型散發?

是,若要使用 SubscribeToShard,您需要註冊您的取用者,而註冊會啟用增強型散發。依預設,您的取用者將在透過 SubscribeToShard 擷取資料時自動利用增強型散發。

問:什麼是 Amazon Kinesis Connector Library?

Amazon Kinesis Connector Library 是一個預先建置的程式庫,可協助您輕鬆整合 Amazon Kinesis Data Streams 與其他 AWS 服務和第三方工具。使用 Amazon Kinesis Connector Library 需要適用於 Java | Python | Ruby | Node.js | .NET 的 Amazon Kinesis Client Library (KCL)。此程式庫的最新版本提供連接器給 Amazon DynamoDB、Amazon Redshift、Amazon S3 和 Elasticsearch。此程式庫也包括各種範例連接器,還有用於執行範例的 Apache Ant 建置檔案。

問:什麼是 Amazon Kinesis Storm Spout?

Amazon Kinesis Storm Spout 是一個預先建置的程式庫,可協助您輕鬆整合 Amazon Kinesis Data Streams 與 Apache Storm。最新版本的 Amazon Kinesis Storm Spout 從 Amazon Kinesis 資料串流擷取資料,再做為 Tuple 發出。您將此 Spout 新增到 Storm 拓撲,以利用 Amazon Kinesis Data Streams 做為可靠、可擴展、串流擷取、儲存以及重新執行服務使用。

問:Amazon Kinesis Client Library (KCL)、Amazon Kinesis Connector Library 和 Amazon Kinesis Storm Spout 可使用哪些程式設計語言?

Amazon Kinesis Client Library (KCL) 目前提供 Java、Python、Ruby、Node.js 和 .NET 等版本。Amazon Kinesis Connector Library 和 Amazon Kinesis Storm Spout 目前可在 Java 中使用。我們希望加入其他程式設計語言的支援。

問:Amazon Kinesis 應用程式是否必須使用 Amazon Kinesis Client Library (KCL)?

否,您也可以使用 Amazon Kinesis API 建置 Amazon Kinesis 應用程式。然而,我們建議使用適用於 Java | Python | Ruby | Node.js | .NET 的 Amazon Kinesis Client Library (KCL) (如果適用),因為它會執行與分散式串流處理關聯的繁重任務,讓您更有效地開發應用程式。

問:Amazon Kinesis Client Library (KCL) 如何與 Amazon Kinesis 應用程式互動?

適用於 Java | Python | Ruby | Node.js | .NET 的 Amazon Kinesis Client Library (KCL) 是做為 Amazon Kinesis Data Streams 和 Amazon Kinesis 應用程式之間的中繼。KCL 使用 IRecordProcessor 界面與您的應用程式通訊。您的應用程式會實作此界面,而 KCL 使用此界面中的方法呼叫您的應用程式碼。

如需使用 KCL 建置應用程式的詳細資訊,請參閱 Developing Consumer Applications for Amazon Kinesis Using the Amazon Kinesis Client Library

問:什麼是 Amazon Kinesis Client Library (KCL) 產生的工作者和記錄處理器?

Amazon Kinesis 應用程式可以有多個應用程式執行個體,而工作者是映射到每個應用程式執行個體的處理單元。記錄處理器則是處理來自 Amazon Kinesis 資料串流碎片資料的處理單元。一個工作者會映射到一或多個記錄處理器。而一個記錄處理器會映射到一個碎片,並處理來自該碎片的記錄。

應用程式在啟動時會呼叫適用於 Java | Python | Ruby | Node.js | .NET 的 Amazon Kinesis Client Library (KCL),以執行個體化工作者。此呼叫會為應用程式提供含設定資訊的 KCL,如資料串流名稱和 AWS 登入資料。此呼叫還會傳遞對 IRecordProcessorFactory 實作的參考。KCL 會視需要使用此原廠預設值建立新的記錄處理器,以處理來自資料串流的資料。KCL 使用 IRecordProcessor 界面與這些記錄處理器通訊。

問:Amazon Kinesis Client Library (KCL) 如何持續追蹤 Amazon Kinesis 應用程式處理的資料記錄?

適用於 Java | Python | Ruby | Node.js | .NET 的 Amazon Kinesis Client Library (KCL) 會自動為每個 Amazon Kinesis 應用程式建立 Amazon DynamoDB 表,以追蹤和維護狀態資訊,如重新碎片事件和序號檢查點。DynamoDB 表與應用程式共用相同名稱,因此,您需要確保應用程式名稱不會與相同區域內相同帳戶下的任何現有 DynamoDB 表衝突。

與相同應用程式名稱關聯的所有工作者都假設為在相同的 Amazon Kinesis 資料串流上合作。如果執行相同應用程式碼的其他執行個體,但使用不同的應用程式名稱,則 KCL 會將第二個執行個體視為同時在相同資料串流上操作的完全獨立應用程式。

請注意,除了與 Amazon Kinesis Data Streams 相關的費用之外,也會對您的帳戶收取與 Amazon DynamoDB 表相關的費用。

如需 KCL 如何追蹤應用程式狀態的詳細資訊,請參閱 Tracking Amazon Kinesis Application state

問:如何使用 Amazon Kinesis Client Library (KCL) 自動擴展 Amazon Kinesis 應用程式的處理容量?

您可為 Amazon Kinesis 應用程式建立多個執行個體,並讓這些應用程式執行個體在屬於 Auto Scaling 群組的一組 Amazon EC2 執行個體上執行。當處理需求增加時,將會自動建立執行您的應用程式執行個體的 Amazon EC2 執行個體。適用於 Java | Python | Ruby | Node.js | .NET 的 Amazon Kinesis Client Library (KCL) 將為此新執行個體產生工作者,並自動將記錄處理器從超載的現有執行個體移動到此新執行個體。

問:我的 Amazon Kinesis 資料串流中有資料,為什麼 GetRecords 呼叫會傳回空的結果?

有一個可能的原因是目前碎片反覆運算器指定的位置沒有任何記錄。即使您使用 TRIM_HORIZON 做為碎片反覆運算器類型也可能發生這種狀況。Amazon Kinesis 資料串流代表一個連續的資料串流。您應該在迴圈中呼叫 GetRecords 操作,當碎片反覆運算器進行到存放記錄的位置時,就會傳回記錄。

問:什麼是 GetRecords 操作中傳回的 ApproximateArrivalTimestamp?

每個記錄都包含稱為 ApproximateArrivalTimestamp 的值。當 Amazon Kinesis 成功接收並儲存記錄時,就會設定它的值。此時間戳記的精準度可到毫秒,但不保證時間戳記的準確性。例如,在碎片或跨資料串流內的記錄可能有不按順序的時間戳記。

問:如果 Amazon Kinesis 應用程式從資料串流讀取資料時超出 Amazon Kinesis 資料串流的容量限制,會發生什麼情況?

Amazon Kinesis 資料串流的容量限制由資料串流內的碎片數量定義。資料輸送量或讀取資料呼叫的數量可以超過限制。當超過容量限制時,讀取資料呼叫將以 ProvisionedThroughputExceeded 例外狀況被拒絕。如果這是因為臨時的資料串流輸出資料速率增加所導致,則 Amazon Kinesis 應用程式會重試到最終完成請求。如果這是因為持續的資料串流輸出資料速率增加所導致,則應增加資料串流內的碎片數量,以提供足夠容量來持續地成功執行讀取資料呼叫。在這兩種情況下,Amazon CloudWatch 指標都可讓您了解資料串流輸出資料速率的變化,以及 ProvisionedThroughputExceeded 例外狀況的出現。

管理 Kinesis Data Streams

問:如何變更 Amazon Kinesis 資料串流的輸送量?

變更資料串流輸送量有兩種方法。您可以使用 UpdateShardCount API 或 AWS 管理主控台擴展資料串流中的碎片數,或者可以調整資料串流中的碎片數量 (重新碎片) 以變更 Amazon Kinesis 資料串流的輸送量。

問:使用 UpdateShardCount 或 AWS 管理主控台變更 Amazon Kinesis 資料串流的輸送量需要多久的時間?

通常擴展請求需要花幾分鐘的時間完成。較大的擴展請求會比較小的擴展請求花費更多時間。

問:UpdateShardCount 的限制為何?

如需 UpdateShardCount 限制的相關資訊,請參閱 Amazon Kinesis Data Streams Service API 參考

問:使用 UpdateShardCount 或透過重新碎片變更 Amazon Kinesis 資料串流的輸送量時,Amazon Kinesis Data Streams 是否仍維持可用?

是。使用 UpdateShardCount 或重新碎片變更資料串流的輸送量時,您可以繼續將資料新增到 Amazon Kinesis 資料串流,以及從 Amazon Kinesis 資料串流讀取資料。

問:什麼是重新碎片?

重新碎片是透過一系列碎片分割或合併來擴展資料串流的程序。在碎片分割中,單一碎片會分為兩個碎片,這樣會增加資料串流的輸送量。在碎片合併中,兩個碎片會合併為單一碎片,這樣會減少資料串流的輸送量。如需詳細資訊,請參閱 Amazon Kinesis Data Streams developer guide 中的 Resharding a Data Stream

問:透過重新碎片可以多久變更一次 Amazon Kinesis 資料串流的輸送量?需要花費多久的時間?

碎片分割或碎片合併等重新碎片操作需要花幾秒鐘的時間。您一次僅能執行一個重新碎片操作。因此,對於僅有一個碎片的 Amazon Kinesis 資料串流,分割一個碎片要花幾秒才能讓輸送量加倍。所以針對有 1000 個碎片的資料串流,分割 1000 個碎片需要 30000 秒 (8.3 小時) 才能讓輸送量加倍。需要額外輸送量時,我們建議您提前增加資料串流的輸送量。

問:如何變更 Amazon Kinesis 資料串流的資料保留期?

Amazon Kinesis 預設會將您的資料存放最長 24 小時。您可以透過啟用延長資料保留時間,增加最多達 7 天的資料保留期。

如需變更資料保留期的詳細資訊,請瀏覽變更資料保留期

問:如何監控 Amazon Kinesis 資料串流的操作和效能?

Amazon Kinesis Data Streams 管理主控台會顯示重要的操作和效能指標,如 Amazon Kinesis 資料串流的資料輸入和輸出輸送量。Amazon Kinesis Data Streams 也與 Amazon CloudWatch 整合,因此您可針對資料串流及資料串流中的碎片來收集、查看和分析 CloudWatch 指標。如需 Amazon Kinesis Data Streams 指標的詳細資訊,請參閱 Monitoring Amazon Kinesis Data Streams with Amazon CloudWatch

請注意,所有串流層級指標都是免費的。所有啟用的碎片層級指標會按照 Amazon CloudWatch 定價收費。

問:如何管理和控制對 Amazon Kinesis 資料串流的存取權限?

Amazon Kinesis Data Streams 已與 AWS Identity and Access Management (IAM) 整合,這是一個讓您能夠安全地控制對 AWS 服務和使用者資源存取權限的服務。例如,您可以建立僅允許特定使用者或群組將資料新增到 Amazon Kinesis 資料串流的政策。如需資料串流存取管理和控制的詳細資訊,請參閱 Controlling Access to Amazon Kinesis Data Streams Resources using IAM

問:如何記錄對 Amazon Kinesis 資料串流所發出的 API 呼叫,以用於安全分析和操作故障排除?

Amazon Kinesis 與 Amazon CloudTrail 整合,這是一個為您的帳戶記錄 AWS API 呼叫並提供日誌檔的服務。如需 API 呼叫日誌的詳細資訊和支援的 Amazon Kinesis API 操作的清單,請參閱 Logging Amazon Kinesis API calls Using Amazon CloudTrail

問:如何有效管理 Amazon Kinesis 資料串流以及與這些資料串流相關的成本?

Amazon Kinesis Data Streams 可讓您為 Amazon Kinesis 資料串流加上標籤,以更輕鬆地管理資源和成本。標籤可由使用者定義,並以鍵值組表示,如此有助於組織 AWS 資源。例如,您可以按照成本中心在資料串流加上標籤,以便根據成本中心來分類和追蹤 Amazon Kinesis Data Streams 成本。如需 Amazon Kinesis Data Streams 標記的詳細資訊,請參閱 Tagging Your Amazon Kinesis Data Streams

問:如何取得使用碎片限制的描述?

您可以使用 DescribeLimits API 來了解您如何利用帳戶 碎片限制。DescribeLimits API 將會傳回帳戶的碎片限制和開放碎片的數量。如果您需要提高碎片限制,可請求提高限額

安全性

問:使用 Kinesis Data Streams 時的資料安全性如何?

Kinesis 預設就非常安全。只有帳戶和資料串流擁有者有權存取他們所建立的 Kinesis 資源。Kinesis 支援使用者身份驗證,以控制對資料的存取。您可以使用 AWS IAM 政策,選擇性地向使用者和使用者群組授與許可。您可以使用 HTTPS 通訊協定,透過 SSL 終端節點安全地從 Kinesis 放置和取得資料。如果您需要額外的安全性,可以使用伺服器端加密搭配 AWS KMS 主金鑰,加密存放在資料串流中的資料。AWS KMS 允許使用 AWS 產生的 KMS 主金鑰進行加密,但您也可以選擇將自己的主金鑰帶入 AWS KMS。最後,您可以使用自己的加密庫先在用戶端加密資料,再將資料放進 Kinesis。

問:是否可在不使用公有 IP 的情況下,從 Amazon Virtual Private Cloud (VPC) 以私有方式存取 Kinesis Data Streams API?

是,您可以透過建立 VPC 端點,從 Amazon Virtual Private Cloud (VPC) 以私有方式存取 Kinesis Data Streams API。使用 VPC 端點,AWS 網路會處理 VPC 和 Kinesis Data Streams 之間的路由,無須使用網際網路閘道、NAT 閘道或 VPN 連接。Kinesis Data Streams 使用的最新一代 VPC 端點採用 AWS PrivateLink 技術,這項技術可使用彈性網路界面 (ENI) 搭配 VPC 的私有 IP 啟用 AWS 服務間的私有連線。若要進一步了解 PrivateLink,請參閱 PrivateLink 文件

加密

問:是否可加密放入 Kinesis 資料串流的資料?

是,有兩種選項可加密放入 Kinesis 資料串流的資料。您可以使用伺服器端加密,這是一項全受管的功能,可在您將資料放入資料串流和取出時自動加密和解密資料。或是透過在用戶端加密和解密,將加密的資料寫入資料串流。

問:為什麼應該使用伺服器端加密而不要使用用戶端加密?

客戶通常會選擇伺服器端加密而不選擇用戶端加密,原因如下:

  • 用戶端加密不易執行
  • 希望在用戶端加密之上有第二層安全性
  • 用戶端金鑰管理方案不易實作

問:什麼是伺服器端加密?

Kinesis Data Streams 的伺服器端加密會利用使用者指定的 AWS KMS 主金鑰 (CMK) 自動加密資料,再寫入資料串流儲存層,然後從儲存擷取資料之後解密資料。加密之後無法寫入,也無法讀取承載和分區索引鍵,除非從資料串流寫入或讀取的使用者擁有許可,能夠在資料串流使用為加密選取的金鑰。因此,伺服器端加密可輕鬆符合控管資料的內部安全性及合規要求。

使用伺服器端加密時,您的用戶端應用程式 (生產者和取用者) 不需要知道加密,他們不需要管理 CMK 或加密操作,而且您的靜態和動態資料在 Kinesis Data Streams 服務中都會加密。伺服器端加密功能使用的所有 CMK 都是由 AWS KMS 提供。AWS KMS 可讓您輕鬆使用適用於 Kinesis 的 AWS 受管 CMK (「一鍵式」加密方法)、您自己的 AWS KMS 產生的 CMK,或匯入用於加密的 CMK。

問:是否有伺服器端加密的入門指南?

是,使用者文件中有入門指南。

問:伺服器端加密是否會影響應用程式與 Kinesis Data Streams 的互動方式?

有可能。需視您用於加密的金鑰及控管存取金鑰的許可而定。

  • 如果您使用適用於 Kinesis 的 AWS 受管 CMK (金鑰別名 = aws/kinesis),您的應用程式將不會受到使用此金鑰啟用或停用加密的影響。
  • 如果您使用不同的主金鑰,像是自訂 AWS KMS 主金鑰或匯入 AWS KMS 服務的主金鑰,而且如果資料串流的生產者和取用者沒有使用用於加密的 AWS KMS CMK 的許可,則您的 PUT 和 GET 請求將會失敗。您必須先設定 AWS KMS 金鑰政策允許加密和解密訊息,才能使用伺服器端加密。如需 AWS KMS 許可的範例和詳細資訊,請參閱 AWS Key Management Service Developer Guide 中的 AWS KMS API Permissions: Actions and Resources Reference,或是 Kinesis Data Streams 伺服器端加密使用者文件中的許可指導方針。

問:使用伺服器端加密是否需要額外費用?

是,但如果您使用適用於 Kinesis 的 AWS 受管 CMK 且沒有超過免費方案 KMS API 使用費用,則使用伺服器端加密免費。以下依資源說明費用:

金鑰:

  • 適用於 Kinesis 的 AWS 受管 CMK (別名 = "aws/kinesis") 免費。
  • 使用者產生的 KMS 金鑰需支付 KMS 金鑰費用。進一步了解

KMS API 用量:

  • API 用量費用適用於所有 CMK,包含自訂項目。Kinesis Data Streams 在輪換資料金鑰時,大約每 5 分鐘呼叫一次 KMS。以一個月 30 天來說,由 Kinesis 資料串流啟動的 KMS API 呼叫總成本應該只有幾美元。請注意,此成本會隨著您在資料生產者和取用者使用的使用者登入資料數量而增加,因為每個使用者登入資料都需要唯一的 AWS KMS API 呼叫。當您使用 IAM 角色進行身份驗證時,每一個 assume-role-call 都會產生唯一的使用者登入資料,建議您快取 assume-role-call 傳回的使用者登入資料以節省 KMS 成本。

問:哪些 AWS 區域提供 Kinesis Data Streams 伺服器端加密?

AWS GovCloud 區域和所有公有區域都提供 Kinesis Data Streams 伺服器端加密,但中國 (北京) 區域除外。

問:如何從資料串流開始、更新或移除伺服器端加密?

這些操作都可以使用 AWS 管理主控台或使用 AWS 開發套件完成。要進一步了解,請參閱 Kinesis Data Streams server-side encryption getting started guide

問:伺服器端加密使用哪種加密演算法?

Kinesis Data Streams 使用 AES-GCM 256 演算法加密。

問:如果我加密的資料串流已寫入純文字或加密文字等資料,更新加密時資料串流中的所有資料是否都會加密或解密?

否,新的加密只會加密新寫入資料串流的資料 (或保留解密)。

問:Kinesis Data Streams 的伺服器端加密會加密哪些項目?

伺服器端加密會加密訊息承載以及由資料串流生產者應用程式指定的分區索引鍵。

問:伺服器端加密是碎片特定功能還是串流特定功能?

伺服器端加密是串流特定功能。

問:是否可變更用來加密特定資料串流的 CMK?

是,使用 AWS 管理主控台或 AWS 開發套件就可以選擇新的主金鑰套用到特定資料串流。

問:是否可逐步說明從我將資料傳送到啟用伺服器端加密的 Kinesis 資料串流起以及擷取時的資料加密生命週期?

以下將為您逐步說明 Kinesis Data Streams 如何使用 AWS KMS CMK 在訊息存放在 PUT 前加密訊息,以及在 GET 路徑擷取之後解密訊息。當您在啟用伺服器端加密的資料串流呼叫 putRecord(s) 或 getRecords 時,Kinesis 和 AWS KMS 會執行以下動作 (包含解密)。

  1. 透過 HTTPS 使用 SSL 將資料從客戶的 Kinesis 生產者應用程式 (用戶端) 傳送到 Kinesis。
  2. Kinesis 收到資料、存放在 RAM,然後將加密套用到記錄的承載和分區索引鍵。
  3. Kinesis 請求純文字輸入建鑰資料 (IKM),並使用客戶選取的 KMS 主金鑰加密 IKM 副本。
  4. AWS KMS 建立 IKM、使用主金鑰進行加密,然後將純文字 IKM 和加密的 IKM 傳送到 Kinesis。
  5. Kinesis 使用純文字 IKM 取得每筆記錄唯一的資料金鑰。
  6. Kinesis 使用資料金鑰加密承載和分區索引鍵,並將純文字金鑰從記憶體移除。
  7. Kinesis 將加密的 IKM 金鑰附加到加密資料。
  8. 純文字 IKM 則快取在記憶體中供重複使用,會在 5 分鐘後過期。
  9. Kinesis 將加密訊息交付至後端存放區,該處可靜態存放訊息,也可由 getRecords 呼叫進行擷取。

當您呼叫 getRecords 時,Kinesis 和 AWS KMS 會執行以下動作 (包含解密)。

  1. 發出 getRecords 呼叫時,Kinesis 的前端會從後端服務擷取加密的記錄。
  2. Kinesis 使用客戶請求產生的字符向 KMS 發出請求。AWS KMS 進行授權。
  3. Kinesis 解密隨記錄存放的加密 IKM。
  4. Kinesis 從解密的 IKM 重新建立每筆記錄的資料金鑰。
  5. 如果獲得授權,Kinesis 會解密承載並從記憶體移除純文字資料金鑰。
  6. Kinesis 透過 SSL 和 HTTPS 將承載交付給請求記錄的 Kinesis 取用者 (用戶端)。

定價和帳單

問:Amazon Kinesis Data Streams 是否可用於 AWS 免費方案?

否。AWS 免費方案目前不包括 Amazon Kinesis Data Streams。AWS 免費方案是提供一組 AWS 服務免費試用的計劃。有關 AWS 免費方案的更多詳細資訊,請參閱 AWS 免費方案

問:Amazon Kinesis Data Streams 的費用是多少?

Amazon Kinesis Data Streams 使用簡單的按使用量付費定價。既無預付費用也沒有最低費用,只需為您使用的資源付費。Amazon Kinesis Data Streams 的費用包含兩個核心維度和三個選用維度:

  • 由 Amazon Kinesis 資料串流內的碎片數量決定的每小時碎片成本。
  • 以及由資料產生者新增到資料串流的 25 KB 承載單位數量決定的 PUT 承載單位成本。

選擇性:

  • 選擇性延長資料保留時間的費用是根據資料串流產生的碎片小時數來決定。啟用延長資料保留時,您需針對串流中的每個碎片支付延長保留時間費率。
  • 增強型散發是一項選擇性收費,具有兩個費用維度:取用者碎片時數和資料擷取。取用者碎片時數反應串流中的碎片數目乘以使用增強型散發的取用者數目。資料擷取由傳送至使用增強型散發之取用者的 GB 數決定。 

如需 Amazon Kinesis Data Streams 費用的詳細資訊,請參閱 Amazon Kinesis Data Streams 定價

問:使用 PutRecords 操作取代 PutRecord 操作時,PUT 承載單位成本是否會改變?

PUT 承載單位費用是根據新增到 Amazon Kinesis 資料串流的 25 KB 承載單位數量來計算。不論是使用 PutRecords 操作或 PutRecord 操作,PUT 承載單位成本是相同的。

問:"CLOSED" 狀態中的碎片如何收費?

碎片在重新碎片之後就會變成 "CLOSED" 狀態。您無須為 "CLOSED" 狀態的碎片付費。

問:除了 Amazon Kinesis Data Streams 費用之外,使用 Amazon Kinesis Data Streams 是否還需支付其他費用?

如果使用 Amazon EC2 執行 Amazon Kinesis 應用程式,則除了 Amazon Kinesis Data Streams 費用之外,還需支付 Amazon EC2 資源的費用。

Amazon Kinesis Client Library (KCL) 使用 Amazon DynamoDB 表來追蹤記錄處理的狀態資訊。如果您的 Amazon Kinesis 應用程式使用 KCL,則您除了 Amazon Kinesis Data Streams 費用之外,還需支付 Amazon DynamoDB 資源的費用。

如果您啟用增強的碎片層級指標,除了 Amazon Kinesis Data Streams 費用之外,還將向您收取與所啟用碎片層級指標關聯的 Amazon CloudWatch 費用。

請注意,以上是三個常見案例,但不代表所有案例。

進一步了解 Amazon Kinesis Data Streams 定價

瀏覽定價頁面
準備好開始使用了嗎?
註冊
還有其他問題嗎?
聯絡我們