本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
考量與限制
注意
Firehose 支援 Apache Iceberg Tables 作為除中國區域 AWS GovCloud (US) Regions和亞太區域 (馬來西亞) AWS 區域以外所有 的目的地。
Firehose 支援 Apache Iceberg 資料表有下列考量和限制。
-
輸送量 – 如果您使用 Direct PUT 作為將資料交付至 Apache Iceberg 資料表的來源,則每個串流的最大輸送量在美國東部 (維吉尼亞北部)、美國西部 (奧勒岡) 和歐洲 (愛爾蘭) 區域為 5 MiB/秒,所有其他區域為 1 MiB/秒 AWS 區域。如果您想要在沒有更新和刪除的情況下將資料插入 Iceberg 資料表,並且想要提高串流的輸送量,則可以使用 Firehose 限制表單
請求提高輸送量限制。 True
如果您只想要插入資料而不執行更新和刪除,也可以將AppendOnly
旗標設定為 。透過將AppendOnly
旗標設定為True
,Firehose 會自動擴展以符合您的輸送量。目前,您只能使用 CreateDeliveryStream API 操作來設定此旗標。如果直接 PUT 串流因為較高的資料擷取磁碟區超過 Firehose 串流的輸送量容量而遇到限流,則 Firehose 會自動增加串流的輸送量限制,直到包含限流為止。根據增加的輸送量和限流,Firehose 可能需要更長的時間,才能將串流的輸送量增加到所需的層級。因此,請繼續重試失敗的資料擷取記錄。如果您預期資料磁碟區在突然的大爆量中增加,或如果您的新串流需要高於預設輸送量限制的輸送量,請請求增加輸送量限制。
-
S3 每秒交易數 (TPS) – 若要最佳化 S3 效能,如果您使用 Kinesis Data Streams 或 Amazon MSK 做為來源,建議您使用適當的分割區索引鍵來分割來源記錄。如此一來,路由至相同 Iceberg 資料表的資料記錄會對應至一或多個稱為碎片的來源分割區。如果可能,請將屬於不同目標 Iceberg 資料表的資料記錄分散到不同的分割區/碎片,以便您可以使用來源主題/串流的所有分割區/碎片中可用的所有彙總輸送量。
-
資料欄 – 對於資料欄名稱和值,Firehose 只會接受多層巢狀 JSON 中第一個層級的節點。例如,Firehose 會選取第一個層級中可用的節點,包括位置欄位。來源資料的欄名稱和資料類型必須完全符合 Firehose 成功交付的目標資料表。在此情況下,Firehose 預期您在 Iceberg 資料表中有結構或映射資料類型資料欄,以符合位置欄位。Firehose 支援 16 個巢狀層級。以下是巢狀 JSON 的範例。
{ "version":"2016-04-01", "deviceId":"<solution_unique_device_id>", "sensorId":"<device_sensor_id>", "timestamp":"2024-01-11T20:42:45.000Z", "value":"<actual_value>", "position":{ "x":143.595901, "y":476.399628, "z":0.24234876 } }
如果資料欄名稱或資料類型不相符,則 Firehose 會擲回錯誤,並將資料交付至 S3 錯誤儲存貯體。如果 Apache Iceberg 資料表中的所有資料欄名稱和資料類型相符,但來源記錄中存在其他欄位,Firehose 會略過新欄位。
-
每筆記錄一個 JSON 物件 – 一個 Firehose 記錄中只能傳送一個 JSON 物件。如果您在記錄中彙總並傳送多個 JSON 物件,Firehose 會擲回錯誤,並將資料交付至 S3 錯誤儲存貯體。如果您使用 KPL 彙總記錄,並使用 Amazon Kinesis Data Streams 將資料擷取至 Firehose 做為來源,則 Firehose 會自動取消彙總每個記錄並使用一個 JSON 物件。
-
壓縮和儲存最佳化 – 每次使用 Firehose 寫入 Iceberg Tables 時,它會遞交和產生快照、資料檔案和刪除檔案。擁有許多資料檔案會增加中繼資料額外負荷,並影響讀取效能。為了獲得有效率的查詢效能,建議您考慮一個解決方案,該解決方案會定期採用小型資料檔案,並將其重寫為較小的資料檔案。此程序稱為 compaction。 AWS Glue Data Catalog 支援自動壓縮 Apache Iceberg Tables。如需詳細資訊,請參閱《AWS Glue 使用者指南》中的壓縮管理。如需詳細資訊,請參閱自動壓縮 Apache Iceberg 資料表
。或者,您可以執行 Athena Optimize 命令來手動執行壓縮。如需 Optimize 命令的詳細資訊,請參閱 Athena Optimize。 除了壓縮資料檔案之外,您還可以使用對 Apache Iceberg 資料表執行資料表維護的 VACUUM 陳述式來最佳化儲存體使用量,例如快照過期和孤立檔案移除。或者,您也可以使用 AWS Glue Data Catalog 來支援 Apache Iceberg 資料表的受管資料表最佳化,方法是自動移除資料檔案、孤立檔案,並使不再需要的快照過期。如需詳細資訊,請參閱此部落格文章,了解 Apache Iceberg Tables 的儲存最佳化
。 -
我們不支援 Apache Iceberg Tables 的 Amazon MSK Serverless 來源做為目的地。
-
為了交付至 Amazon S3 資料表儲存貯體中的資料表,Firehose 僅支援預設 AWS Glue 目錄。
-
對於更新操作,Firehose 會放置刪除檔案,後面接著插入操作。放置刪除檔案會產生 Amazon S3 費用。
-
Firehose 不建議使用多個 Firehose 串流將資料寫入相同的 Apache Iceberg 資料表。這是因為 Apache Iceberg 依賴樂觀並行控制 (OCC)
。如果多個 Firehose 串流嘗試同時寫入單一 Iceberg 資料表,則只有一個串流成功在指定時間遞交資料。其他串流無法遞交退避,並重試遞交操作,直到設定的重試持續時間過期為止。耗盡重試持續時間後,資料和刪除檔案金鑰 (Amazon S3 路徑) 會傳送至設定的 Amazon S3 錯誤字首。 -
Firehose 支援的目前 Iceberg Library 版本是 1.5.2 版。
-
若要將加密資料交付至 Amazon S3 Tables,您應該在 Amazon S3 Tables 中設定 AWS Key Management Service 參數,而不是在 Firehose 組態中設定參數。如果您在 Firehose 中設定 AWS Key Management Service 參數以將加密的資料交付至 Amazon S3 Tables,則 Firehose 無法使用這些參數進行加密。如需詳細資訊,請參閱搭配 AWS KMS 金鑰使用伺服器端加密。
-
Firehose 串流僅支援交付至透過 Iceberg 的 GlueCatalog API 建立的資料庫和資料表。不支援交付至透過 Glue SDK 建立的資料庫和資料表。請注意,連字號 (
-
) 不是資料庫和 Iceberg 程式庫中的資料表名稱支援的字元。如需詳細資訊,請參閱 Iceberg 程式庫支援的 Glue Database Regex和 Glue Table Regex 。