串流擷取 - Amazon Redshift

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

串流擷取

串流擷取可從 Amazon Kinesis Data StreamsAmazon Managed Streaming for Apache Kafka 提供低延遲、高速擷取的串流資料至由 Amazon Redshift 佈建或 Amazon Redshift Serverless 的具體化視觀表。其可以減少存取資料所需的時間,並降低儲存成本。您可以為 Amazon Redshift 叢集或 Amazon Redshift Serverless 設定串流擷取,並使用 SQL 陳述式建立具體化視觀表,如 在 Amazon Redshift 中建立具體化視觀表 中所述。之後,使用具體化視觀表重新整理,您可以每秒擷取數百 MB 的資料。如此可快速存取快速重新整理的外部資料。

資料流程

Amazon Redshift 佈建的叢集或 Amazon Redshift Serverless 工作群組是串流取用者。具體化視觀表是從串流讀取資料的登陸區域,會在資料到達時進行處理。例如,您可以使用熟悉的 SQL 取用 JSON 值,並對應至具體化視觀表的資料欄。重新整理具體化視觀表時,Redshift 會耗用已配置 Kinesis 資料碎片或 Kafka 分割區的資料,直到檢視達到 Kinesis 串流的同位檢查,或 Kafka 主題最後一個SEQUENCE_NUMBER為止。Offset後續具體化視觀表會重新整理上次重新整理的最後一個 SEQUENCE_NUMBER 的讀取資料,直到達到串流或主題資料的同位處理為止。

串流擷取使用案例

Amazon Redshift 串流擷取的使用案例包含處理持續產生 (串流) 的資料,而且必須在產生的短時間 (延遲) 內處理。這稱為近乎即時的分析。資料來源可能有所不同,包括 IoT 裝置、系統遙測資料或來自忙碌網站或應用程式的點擊流資料。

串流擷取考量

以下是您設定串流擷取環境時,有關效能和計費的重要考量事項和最佳做法。

  • 自動重新整理使用狀況和啟動 - 具體化視觀表或檢視的自動重新整理查詢會視為任何其他使用者工作負載 自動重新整理會在資料到達時從串流載入資料。

    您可以針對為串流擷取建立的具體化視觀表明確開啟自動重新整理。若要這樣做,請在具體化視觀表定義中指定 AUTO REFRESH。預設為手動重新整理。若要為現有具體化視觀表指定自動重新整理以進行串流擷取,您可以執行 ALTER MATERIALIZED VIEW 以將其開啟。如需詳細資訊,請參閱 CREATE MATERIALIZED VIEWALTER MATERIALIZED VIEW

  • 串流擷取和 Amazon Redshift Serverless - 適用於已佈建叢集上 Amazon Redshift 串流擷取的相同設定和組態指示也適用於 Amazon Redshift Serverless 上的串流擷取。使用必要的 RPU 層級調整 Amazon Redshift Serverless 的大小很重要,可支援具有自動重新整理和其他工作負載的串流擷取。如需詳細資訊,請參閱 Amazon Redshift Serverless 的計費

  • Amazon Redshift 節點位於與 Amazon MSK 叢集不同的可用區域中 - 當您設定串流擷取時,如果 Amazon MSK 啟用了機架意識,Amazon Redshift 會嘗試連線到同一可用區域中的 Amazon MSK 叢集。如果所有節點都與 Amazon Redshift 叢集位於不同的可用區域,則可能會產生跨可用區域的資料傳輸費用。若要避免這種情況,請將至少一個 Amazon MSK 代理程式叢集節點保留在與 Redshift 佈建的叢集或工作群組相同的可用區域中。

  • 重新整理開始位置 - 建立具體化視觀表之後,其初始重新整理會從 Kinesis 串流的 TRIM_HORIZON 開始,或從 Amazon MSK 主題的位移 0 開始。

  • 資料格式 - 支援的資料格式僅限於可以從 VARBYTE 轉換的格式。如需詳細資訊,請參閱 VARBYTE 類型VARBYTE 運算子

  • 串流至多個具體化視觀表 - 在 Amazon Redshift 中,我們建議您在大多數情況下將每個串流的資料放置在單一具體化視觀表中。但是,您可以擷取串流並將資料放置在多個具體化視觀表中。例如,您可以擷取包含運動資料的串流,但您可以將每項運動的資料組織成個別的具體化視觀表。

    請注意,當您將資料擷取至多個具體化視觀表並重新整理時,輸出成本可能會較高,特別是從串流提供者讀取資料時。此外,讀取到多個具體化視觀表的較高資源使用量也會影響其他工作負載。另請注意串流提供者的頻寬、輸送量和效能限制。如需資料串流定價的相關資訊,請參閱 Kinesis Data Streams 定價Amazon Managed Streaming for Apache Kafka 定價

  • 將記錄附加至資料表 - 您可以執行 ALTER TABLE APPEND 將資料列從現有的來源具體化視觀表附加至目標資料表。這只有在具體化視觀表設定為串流擷取時才有作用。如需詳細資訊,請參閱 ALTER TABLE APPEND

  • 執行 TRUNCATE 或 DELETE - 您可以使用下列幾種方法,從用於串流擷取的具體化視觀表中移除記錄:

    • TRUNCATE – 此命令會從針對串流擷取設定的具體化視觀表中刪除所有資料列。其不會執行資料表掃描。如需詳細資訊,請參閱 TRUNCATE

    • DELETE – 此命令會從針對串流擷取設定的具體化視觀表中刪除所有資料列。如需詳細資訊,請參閱 DELETE

使用串流擷取與 Amazon S3 中的暫存資料進行比較

將資料串流至 Amazon Redshift 或 Amazon Redshift Serverless 有多種選項。兩個眾所周知的選項是串流擷取 (如本主題所述),或使用 Firehose 設定向 Amazon S3 的交付串流。以下清單描述了每個方法:

  1. 從 Kinesis Data Streams 或 Amazon Managed Streaming for Apache Kafka 到 Amazon Redshift 或 Amazon Redshift Serverless 的串流擷取涉及設定具體化視觀表以接收資料。

  2. 使用 Kinesis 資料串流將資料交付到 Amazon Redshift,並透過 Firehose 進行串流,包括將來源串流連接到亞馬遜資料火管,然後等待 Firehose 在 Amazon S3 中暫存資料。這個程序會利用不同大小的批次,並以可變長度的緩衝區作為間隔。串流到 Amazon S3 之後,Firehose 會啟動 COPY 命令來載入資料。

透過串流擷取,您可以略過第二個程序所需的幾個步驟:

  • 您不必將資料傳送到 Amazon Data Firehose 交付串流,因為透過串流擷取,可以將資料直接從 Kinesis Data Streams 傳送到 Redshift 資料庫中的具體化檢視。

  • 您不必在 Amazon S3 登陸串流資料,因為串流擷取資料會直接傳送至 Redshift 具體化視觀表。

  • 您不需要撰寫和執行 COPY 命令,因為具體化視觀表中的資料會直接從串流重新整理。將資料從 Amazon S3 載入 Redshift 不是程序的一部分。

請注意,串流擷取僅限於來自 Amazon Kinesis Data Streams 的串流及來自 Amazon MSK 的主題。若要從 Kinesis Data Streams 至 Amazon Redshift 以外的目標,您可能需要一個 Firehose 交付串流。如需詳細資訊,請參閱將資料傳送至 Amazon 資料 Firehose 交付串流

限制

功能或行為 描述
Kafka 主題長度限制

Kafka 主題的名稱不得超過 128 個字元 *不包括引號)。如需詳細資訊,請參閱名稱和識別碼

具體化視觀表的累加式重新整理和 JOIN

具體化視觀表必須是可以增量維護的。Kinesis 或 Amazon MSK 無法完整重新計算,因為預設情況下不會保留過去 24 小時或 7 天的串流或主題歷史記錄。您可以在 Kinesis 或 Amazon MSK 中設定較長的資料保留期間。但是,這可能會導致更多的維護和成本。此外,在 Kinesis 串流或 Amazon MSK 主題上建立的具體化視觀表目前不支援 JOIN。在串流或主題上建立具體化視觀表之後,您可以建立另一個具體化視觀表,將串流具體化視觀表結合至其他具體化視觀表、資料表或檢視。

如需詳細資訊,請參閱 REFRESH MATERIALIZED VIEW

記錄剖析

Amazon Redshift 串流擷取不支援剖析由 inesis Producer Library 彙總的記錄 (KPL 關鍵概念 - 彙總)。彙總記錄會被擷取,但會儲存為二進制協定緩衝區資料。(如需詳細資訊,請參閱 協定緩衝區)。視您將資料推送至 Kinesis 的方式而定,您可能需要關閉此功能。

解壓縮

VARBYTE 目前不支援任何解壓縮方法。因此,包含壓縮資料的記錄無法在 Redshift 中查詢。在將資料推送到 Kinesis 串流或 Amazon MSK 主題之前,請先將資料解壓縮。

記錄大小上限

Amazon Redshift 可以從 Kinesis 或 Amazon MSK 擷取的任何記錄欄位的大小上限略小於 1MB。以下幾點詳細說明了此行為:

  • VARBYTE 長度上限 - VARBYTE 類型支援的資料長度上限為 1,024,000 個位元組。由於 Kinesis 將承載量限制為 1MB,因此在進行 Base64 編碼之後,所有 Kinesis 資料都可以透過 Amazon Redshift 擷取。

  • 訊息限制 - 預設的 Amazon MSK 組態會將訊息限制為 1MB。此外,如果訊息包含標頭,則資料量限制為 1,048,470 個位元組。使用預設設定時,擷取沒有問題。但是,您可以將 Kafka 的訊息大小上限更改為更大的值 (Amazon MSK 也是如此)。在這種情況下,可能是 Kafka 記錄的鍵/值欄位 (或標題) 超過大小限制。這些記錄可能會導致錯誤,並且不會被擷取。

錯誤記錄

在每個記錄因為資料大小超過大小限制而無法擷取至 Redshift 的情況下,就會略過該記錄。在這種情況下,具體化視觀表重新整理仍然會成功,並且每個錯誤記錄的區段都會寫入 SYS_STREAM_SCAN_ERRORS 系統表。但不會略過商務邏輯所產生的錯誤,例如計算中的錯誤或類型轉換所產生的錯誤。在將邏輯新增至具體化視觀表定義之前,請仔細測試邏輯,以避免這些問題。

Amazon MSK 多 VPC 私有連接

Redshift 串流擷取目前不支援 Amazon MSK 多 VPC 私有連線。或者,您可以使用 VPC 對等連接 VPC 或透過中央集線器連AWS Transit Gateway接 VPC 和內部部署網路。這兩種方式都可以讓 Redshift 與 Amazon MSK 叢集通訊,或與另一個 VPC 中的 Amazon MSK 無伺服器通訊。