Amazon Redshift 自 2025 年 11 月 1 日起不再支援建立新的 Python UDF。如果您想要使用 Python UDF,請在該日期之前建立 UDF。現有 Python UDF 將繼續正常運作。如需詳細資訊,請參閱部落格文章
開始從 Apache Kafka 來源進行串流擷取
本主題說明如何使用具體化視觀表從 Amazon MSK、Apache Kafka 或 Confluent Cloud 取用串流資料。
Amazon Redshift 串流擷取的目的是簡化直接從串流服務擷取串流資料至 Amazon Redshift 或 Amazon Redshift Serverless 的程序。這適用於 Amazon MSK Provisioned 和 Amazon MSK Serverless、開放原始碼 Apache Kafka,以及 Confluent Cloud。Amazon Redshift 串流擷取讓您在將串流資料擷取至 Amazon Redshift 之前,不需要在 Amazon S3 中暫存 Apache Kafka 主題。
在技術層級上,串流擷取可提供以低延遲、高速的方式,將串流或主題資料擷取至 Amazon Redshift 具體化視觀表。在設定之後,您可以使用具體化視觀表重新整理採用大量資料。
您必須擁有可用的 Apache Kafka 來源,才能設定 Amazon Redshift 串流擷取。如果您沒有來源,請使用下列指示建立一個來源:
Amazon MSK - 開始使用 Amazon MSK
Apache Kafka - Apache Kafka 快速入門
Confluent Cloud - Confluent Cloud 快速入門
設定從 Kafka 執行串流擷取
使用下列程序設定從 Amazon MSK 或非 AWS 受管 (Apache Kafka 和 Confluent Cloud) 的 Apache Kafka 來源,串流擷取至 Amazon Redshift。
設定身分驗證
本節說明設定身分驗證,以允許 Amazon Redshift 應用程式存取 Amazon MSK 來源。
建立應用程式的角色後,請連接下列其中一項政策,以允許存取您的 Amazon MSK、Apache Kafka 或 Confluent Cloud 叢集。對於 mTLS 身分驗證,您可以將 Amazon Redshift 使用的憑證儲存在 ACM 或 Secrets Manager 中,因此您必須選擇符合憑證儲存位置的政策。
請注意,當您搭配任何支援的 Apache Kafka 串流來源使用直接串流擷取至 Amazon Redshift 時,身分驗證或傳輸中的資料不支援自我簽署憑證。其中包括 Amazon MSK、Apache Kafka 和 Confluent Cloud。考慮使用透過 AWS Certificate Manager 或任何其他公開信任的憑證認證機構所產生的憑證。
只有 Kafka 2.7.1 版或更新版本支援透過 MSK 進行 Amazon Redshift IAM 身分驗證。
AUTHENTICATION IAM (僅限 Amazon MSK):
AUTHENTICATION MTLS:使用儲存在 AWS Certificate Manager 中的憑證
AUTHENTICATION MTLS:使用儲存在 AWS Secrets Manager 中的憑證
設定您的 VPC
建立身分驗證資源後,請檢查您的 VPC,並確認 Amazon Redshift 叢集或 Amazon Redshift Serverless 工作群組具有通往 Apache Kafka 來源的路由。
注意
對於 Amazon MSK,Amazon MSK 叢集的輸入安全群組規則應允許您的 Amazon Redshift 叢集或 Redshift Serverless 工作群組的安全群組。您指定的連接埠取決於 Amazon MSK 叢集上設定的身分驗證方法。如需詳細資訊,請參閱連接埠資訊和從 AWS 內 (但 VPC 之外) 存取。
接著在您的 Amazon Redshift 叢集或 Amazon Redshift Serverless 工作群組上啟用增強型 VPC 路由。如需詳細資訊,請參閱啟用增強型 VPC 路由。
建立具體化視觀表
在本節中,您會設定 Amazon Redshift 用來存取 Apache Kafka 串流資料的具體化視觀表。
假設您有可用的 Apache Kafka 叢集,第一步是使用 CREATE EXTERNAL SCHEMA 在 Redshift 中定義結構描述,並將叢集作為資料來源參考。之後,若要存取主題中的資料,請在具體化視觀表中定義 STREAM。您可以使用預設的 Amazon Redshift VARBYTE 資料類型儲存來自主題的記錄,或定義結構描述,將資料轉換為半結構化的 SUPER 格式。當您查詢具體化視觀表時,傳回的記錄會是主題的時間點檢視。
-
在 Amazon Redshift 中,建立外部結構描述以對應至 Apacke Kafka 叢集。語法如下:
CREATE EXTERNAL SCHEMA MySchema FROM KAFKA [ IAM_ROLE [ default | 'iam-role-arn' ] ] AUTHENTICATION [ none | iam | mtls ] {AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'asm-secret-arn'};在
FROM子句中,KAFKA表示結構描述對應來自 Apache Kafka 來源的資料。AUTHENTICATION表示串流擷取的身分驗證類型。有三種可用類型:none - 指定不需身分驗證。這對應至 MSK 上未經驗證的存取。這對應至 Apache Kafka 中的 SSL 身分驗證。Confluent Cloud 不支援此身分驗證方法。
iam — 指定 IAM 身份驗證。您只能使用 IAM 身分驗證搭配 Amazon MSK。選擇此選項時,請確保 IAM 角色具有 IAM 身份驗證的許可。如需設定必要 IAM 政策的詳細資訊,請參閱 設定從 Kafka 執行串流擷取。
mtls - 指定雙向 Transport Layer Security 透過簡化用戶端與伺服器之間的身分驗證來提供安全通訊。在此情況下,用戶端是 Redshift,而伺服器是 Apache Kafka。如需使用 mTLS 設定串流擷取的詳細資訊,請參閱 從 Apache Kafka 來源執行 Redshift 串流擷取時使用 mTLS 進行身分驗證。
請注意,串流擷取不支援使用使用者名稱和密碼的 Amazon MSK 身分驗證。
AUTHENTICATION_ARN參數指定您用來建立加密連線的 ACM 雙向 Transport Layer Security (mTLS) 憑證的 ARN。SECRET_ARN參數指定包含 Amazon Redshift 用於 mTLS 之憑證的 AWS Secrets Manager 機密的 arn。下列範例示範如何在建立外部結構描述時,設定 Amazon MSK 叢集的代理系統 URI:
使用 IAM 身分驗證:
CREATE EXTERNAL SCHEMA my_schema FROM KAFKA IAM_ROLE 'arn:aws:iam::012345678901:role/my_role' AUTHENTICATION IAM URI 'b-1.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9098,b-2.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9098'不使用身分驗證:
CREATE EXTERNAL SCHEMA my_schema FROM KAFKA AUTHENTICATION none URI 'b-1.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9092,b-2.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9092'使用 mTLS:
CREATE EXTERNAL SCHEMA my_schema FROM KAFKA IAM_ROLE 'arn:aws:iam::012345678901:role/my_role' AUTHENTICATION MTLS URI 'b-1.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9094,b- 2.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9094' {AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'asm-secret-arn'}如需建立外部結構描述的詳細資訊,請參閱 CREATE EXTERNAL SCHEMA。
-
建立具體化視觀表以取用主題的資料。使用下列範例所示的 SQL 命令。
CREATE MATERIALIZED VIEW MyView AUTO REFRESH YES AS SELECT * FROM MySchema."mytopic";Kafka 主題名稱會區分大小寫,且可同時包含大寫和小寫字母。若要從具有大寫名稱的主題中擷取,您可以在工作階段或資料庫層級將組態
enable_case_sensitive_identifier設定為true。如需詳細資訊,請參閱名稱和識別碼與 enable_case_sensitive_identifier。若要開啟自動重新整理,請使用
AUTO REFRESH YES。預設行為是手動重新整理。 -
中繼資料資料欄包括下列項目:
中繼資料資料欄 資料類型 說明 kafka_partition bigint 從 Kafka 主題記錄的分割區 ID kafka_offset bigint Kafka 主題中給定分割區記錄的位移 kafka_timestamp_type char(1) 在 Kafka 記錄中使用的時間戳記類型:
C - 客戶端上的記錄建立時間 (CREATE_TIME)
L - Kafka 服務端上的記錄附加時間 (LOG_APPEND_TIME)
U – 記錄建立時間不可用 (NO_TIMESTAMP_TYPE)
kafka_timestamp 沒有時區的時間戳記 記錄的時間戳記值 kafka_key varbyte Kafka 記錄的索引鍵 kafka_value varbyte 從 Kafka 收到的記錄 kafka_headers super 從 Kafka 收到的記錄標頭 refresh_time 沒有時區的時間戳記 重新整理的開始時間 請務必注意,如果您的具體化視觀表定義中有商務邏輯會商業邏輯錯誤,則這可能會導致串流擷取在某些情況下擷取失敗。這可能會導致您必須捨棄並重新建立具體化視觀表。為了避免這種情況,我們建議您盡可能讓商業邏輯保持簡單,並在擷取資料後,對資料執行額外的邏輯。
重新整理檢視,這會調用 Amazon Redshift 從主題讀取,並將資料載入具體化視觀表。
REFRESH MATERIALIZED VIEW MyView;查詢具體化視觀表中的資料。
select * from MyView;執行
REFRESH時,具體化視觀表會直接從主題更新。您可以建立對應至 Kafka 主題資料來源的具體化視觀表。您可以對資料執行篩選和彙總,以做為具體化視觀表定義的一部分。您的串流擷取具體化視觀表 (基礎具體化視觀表) 只能參照一個 Kafka 主題,但是您可以建立與基礎具體化視觀表及其他具體化視觀表或資料表結合的額外具體化視觀表。
如需串流擷取限制的相關資訊,請參閱 串流擷取行為和資料類型。