串流擷取 - 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 運算子

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

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

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

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

串流擷取最佳做法和建議

在某些情況下,您會看到如何設定串流擷取的選項。我們建議採用下列最佳作法。這些基於我們自己的測試,並通過幫助客戶避免導致數據丟失的問題。

  • 從串流資料擷取值 — 如果您在具體化視觀表定義中使用 JSON_EXTRACT_PATH_TEXT 函數粉碎傳入的串流 JSON,可能會大幅影響效能和延遲。為了解釋,對於使用 JSON_EXTRACT_PATH_TEXT 提取的每個列,傳入的 JSON 被重新解析。之後,會發生任何資料類型轉換、篩選和商務邏輯。這表示,例如,如果您從 JSON 資料擷取 10 個資料欄,則會剖析每筆 JSON 記錄 10 次,其中包括類型轉換和其他邏輯。這會導致更高的擷取延遲。我們建議的另一種方法是使用 JSON_PARSE 函數將 JSON 記錄轉換為紅移的超級數據類型。串流資料登陸具體化視觀表後,請使用 PartiQL 從 SUPER 對 JSON 資料的表示擷取個別字串。如需詳細資訊,請參閱查詢半結構化資料。

    同樣重要的是要注意,JSON_EXTRACT _ 路徑 _ 文本具有最大 64 KB 的數據大小。因此,如果任何 JSON 記錄大於 64 KB,則使用 JSON_ 萃取 _ 路徑 _ 文字處理會導致錯誤。

  • Amazon Kinesis Data Streams 串流或 Amazon MSK 主題對應至 Amazon Redshift 串流擷取具體化視觀表 — 我們不建議建立多個串流擷取具體化視圖來擷取單一串流或 Amazon MSK 主題的資料。 Amazon Kinesis Data Streams 這是因為每個具體化視觀表會在 Kafka 主題中為 Kinesis Data Streams 或分割區中的每個碎片建立一個用戶。這可能會導致節流或超過串流或主題的輸送量。由於您多次獲取相同的數據,因此它還可能導致更高的成本。建議您為每個串流或主題建立一個串流具體化視觀表。

    如果您的使用案例要求將一個 KDS 串流或 MSK 主題的資料送入多個具體化視圖,請在執行此操作之前,先查閱AWS 大數據部落格,特別是使用 Amazon Redshift 串流擷取與 Amazon MSK 實作 near-real-time 分析的最佳實務。

使用串流擷取與 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 交付串流

考量事項

以下是將擷取串流擷取至 Amazon Redshift 時的考量事項。

功能或行為 描述
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 將有效載荷限制為 1 MB。

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

注意

即使 Amazon Redshift 支援資料類型的大小上限為 16 MB,Amazon Redshift 也支援從 Kinesis 或亞馬遜 MSK 進行串流擷取的最大大小為 1,024,000 位元組。VARBYTE

錯誤記錄

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

Amazon MSK 多 VPC 私有連接

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