問:什麼是 Amazon Kinesis Streams?

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

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

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

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

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

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

問:如何使用 Amazon Kinesis Streams?

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

問:Amazon Kinesis Streams 有哪些限制?

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

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

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

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

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

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

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

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

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

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

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


問:什麼是碎片?

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

問:什麼是記錄?

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

問:什麼是分區索引鍵?

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

問:什麼是序號?

序號是每個記錄的唯一識別符。序號是資料生產者呼叫 PutRecordPutRecords 操作以新增資料到 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_consumers)
  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 Streams 限制表單為單一區域請求超過 10 個碎片。

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

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


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

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

問:PutRecordPutRecords 有什麼差別?

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

問:什麼是 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 例外狀況的出現。

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

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


:什麼是 Amazon Kinesis 應用程式?

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

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

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

問:什麼是 Amazon Kinesis Connector Library?

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

問:什麼是 Amazon Kinesis Storm Spout?

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

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

Amazon Kinesis Client Library (KCL) 目前提供 JavaPythonRubyNode.js.NET 等版本。Amazon Kinesis Connector LibraryAmazon 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 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 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 例外狀況的出現。


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

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

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

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

問:UpdateShardCount 的限制為何?

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

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

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

問:什麼是重新碎片?

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

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

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

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

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

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

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

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

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

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

Amazon Kinesis Streams 已與 AWS Identity and Access Management (IAM) 整合,這是一個讓您能夠安全地控制對 AWS 服務和使用者資源存取權限的服務。例如,您可以建立僅允許特定使用者或群組將資料新增到 Amazon Kinesis 串流的政策。如需串流存取管理和控制的詳細資訊,請參閱 Controlling Access to Amazon Kinesis 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 Streams可讓您為 Amazon Kinesis Streams 加上標籤,以更輕鬆地管理資源和成本。標籤可由使用者定義,並以鍵值組表示,如此有助於組織 AWS 資源。例如,您可以按照成本中心在串流加上標籤,以便根據成本中心來分類和追蹤 Amazon Kinesis Streams 成本。如需 Amazon Kinesis Streams 標記的詳細資訊,請參閱 Tagging Your Amazon Kinesis Streams

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

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


問:使用 Kinesis 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 Streams API?

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


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

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

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

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

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

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

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

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

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

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

問:伺服器端加密是否會影響應用程式與 Kinesis 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 Streams 伺服器端加密使用者文件中的許可指導方針。

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

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

金鑰:

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

KMS API 用量:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

以下將為您逐步說明 Kinesis 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 Streams 是否可用於 AWS 免費方案?

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

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

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

  • 由 Amazon Kinesis 串流內的碎片數量決定的每小時碎片成本。
  • 以及由資料產生者新增到串流的 25 KB 承載單位數量決定的 PUT 承載單位成本。
  • 選用延長資料保留時間的費用是根據串流產生的碎片小時數來決定。 

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

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

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

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

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

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

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

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

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

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