從 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 開始串流擷取 - Amazon Redshift

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

從 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 開始串流擷取

本主題說明如何MSK使用具體化檢視從 Amazon 取用串流資料。

Amazon Redshift 串流擷取的目的是簡化直接從串流服務擷取串流資料至 Amazon Redshift 或 Amazon Redshift Serverless 的程序。這適用於 Amazon MSK Provisioned 和 Amazon MSK Serverless,以及 Kinesis Data Streams。Amazon Redshift 串流擷取不需要在 Amazon S3 中暫存 Kinesis Data Streams 串流或 Amazon MSK主題,然後再將串流資料擷取至 Redshift。

在技術層面上,從 Amazon Kinesis Data Streams 和 Amazon 串流擷取MSK,提供低延遲、高速的串流或主題資料擷取到 Amazon Redshift 具體化視觀表。在設定之後,您可以使用具體化視觀表重新整理採用大量資料。

MSK 執行下列步驟,為 Amazon 設定 Amazon Redshift 串流擷取:

  1. 建立對應至串流資料來源的外部結構描述。

  2. 建立參照外部結構描述的具體化視觀表。

在設定 Amazon Redshift 串流擷取之前,您必須有可用的 Amazon MSK來源。如果您沒有來源,請遵循開始使用 Amazon MSK中的指示。

注意

串流擷取和 Amazon Redshift Serverless - 本主題中的組態步驟同時適用於佈建的 Amazon Redshift 叢集和 Amazon Redshift Serverless。如需詳細資訊,請參閱串流擷取行為和資料類型

從 Kafka 設定IAM許可和執行串流擷取

假設您有可用的 Amazon MSK叢集,第一步是使用 定義 Redshift 中的結構描述,CREATE EXTERNAL SCHEMA並將 Amazon MSK叢集作為資料來源參考。之後,若要存取主題中的資料,請在具體化視觀表中定義 STREAM。您可以使用預設的 Amazon Redshift VARBYTE資料類型來儲存主題的記錄,或定義將資料轉換為半結構化SUPER格式的結構描述。當您查詢具體化檢視時,傳回的記錄是 point-in-time主題的檢視。

  1. 如果您使用 AUTHENTICATION NONE 連線到 MSK,則不需要IAM任何角色。不過,如果您使用 AUTHENTICATIONIAM或 MTLS 來驗證 Amazon MSK叢集,您的 Amazon Redshift 叢集或 Amazon Redshift Serverless 命名空間必須具有具有適當許可的連接IAM角色。使用信任政策建立IAM角色,讓您的 Amazon Redshift 叢集或 Amazon Redshift Serverless 命名空間擔任該角色。建立角色後,請新增下列其中一個許可以支援 IAM或 MTLS。對於 mTLS 身分驗證,Amazon Redshift 使用的憑證可以存放在 或 中 AWS Certificate Manager AWS Secrets Manager,因此您必須選擇符合憑證存放位置的政策。將角色連接至您的 Amazon Redshift 佈建叢集或 Redshift Serverless 命名空間。如需有關如何設定IAM角色信任政策的資訊,請參閱授權 Amazon Redshift 代表您存取其他 AWS 服務

    AUTHENTICATION IAM:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "MSKIAMpolicy", "Effect": "Allow", "Action": [ "kafka-cluster:ReadData", "kafka-cluster:DescribeTopic", "kafka-cluster:Connect" ], "Resource": [ "arn:aws:kafka:*:0123456789:cluster/MyTestCluster/*", "arn:aws:kafka:*:0123456789:topic/MyTestCluster/*" ] }, { "Effect": "Allow", "Action": [ "kafka-cluster:AlterGroup", "kafka-cluster:DescribeGroup" ], "Resource": [ "arn:aws:kafka:*:0123456789:group/MyTestCluster/*" ] } ] }

    AUTHENTICATION MTLS:使用存放在 中的憑證 AWS Certificate Manager

    { "Version": "2012-10-17", "Statement": [ { "Sid": "MSKmTLSACMpolicy", "Effect": "Allow", "Action": [ "acm:ExportCertificate" ], "Resource": [ "arn:aws:acm:us-east-1:444455556666:certificate/certificate_ID" ] } ] }

    AUTHENTICATION MTLS:使用存放在 中的憑證 AWS Secrets Manager

    { "Version": "2012-10-17", "Statement": [ { "Sid": "MSKmTLSSecretsManagerpolicy", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:us-east-1:444455556666:secret:secret_ID" ] } ] }
  2. 檢查您的 VPC,並驗證您的 Amazon Redshift 叢集或 Amazon Redshift Serverless 是否有前往 Amazon MSK叢集的路由。Amazon MSK叢集的傳入安全群組規則應允許 Amazon Redshift 叢集或 Amazon Redshift Serverless 工作群組的安全群組。您指定的連接埠取決於 Amazon MSK叢集上設定的身分驗證方法。如需詳細資訊,請參閱連接埠資訊和從 內 AWS 外存取。 VPC

    下表顯示要設定用於從 Amazon 串流擷取的免費組態選項MSK:

    Amazon Redshift 組態 Amazon MSK組態 在 Redshift 和 Amazon 之間開啟的連接埠 MSK
    AUTHENTICATION NONE TLS 傳輸已停用 9092
    AUTHENTICATION NONE TLS 傳輸已啟用 9094
    AUTHENTICATION IAM IAM 9098/9198
    AUTHENTICATION MTLS TLS 傳輸已啟用 9094

    Amazon Redshift 身分驗證是在 CREATEEXTERNALSCHEMA陳述式中設定。

    注意

    在 Amazon MSK叢集已啟用互通傳輸層安全 (mTLS) 身分驗證的情況下,將 Amazon Redshift 設定為使用 會AUTHENTICATIONNONE指示其使用連接埠 9094 進行未驗證的存取。不過,這會失敗,因為連接埠正由 mTLS 身分驗證使用中。因此,我們建議您在使用 AUTHENTICATION m 時切換至 mtlsTLS。

  3. 在 Amazon Redshift 叢集或 Amazon Redshift Serverless 工作群組上啟用增強型VPC路由。如需詳細資訊,請參閱啟用增強型VPC路由

  4. 在 Amazon Redshift 中,建立外部結構描述以映射至 Amazon MSK叢集。語法如下:

    CREATE EXTERNAL SCHEMA MySchema FROM MSK [ IAM_ROLE [ default | 'iam-role-arn' ] ] AUTHENTICATION [ none | iam | mtls ] [AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'ssm-secret-arn' ];

    FROM子句中, MSK 表示結構描述會從 Managed Kafka Services 映射資料。

    AUTHENTICATION 表示使用 Amazon 進行串流擷取的身分驗證類型MSK。有三種類型可用:

    • no – 指定不需要身分驗證。這相當於 上的未驗證存取MSK。

    • iam — 指定IAM身分驗證。當您選擇此選項時,請確定IAM角色具有IAM身分驗證的許可。如需設定所需IAM政策的詳細資訊,請參閱 從 Kafka 設定IAM許可和執行串流擷取。

    • mtls – 指定相互傳輸層安全透過促進用戶端和伺服器之間的身分驗證來提供安全通訊。在此情況下,用戶端為 Redshift,伺服器為 Amazon MSK。如需使用 m 設定串流擷取的詳細資訊TLS,請參閱 使用 mTLS 進行身分驗證,以便從 Amazon 擷取 Redshift 串流 MSK

    請注意,不支援使用使用者名稱和密碼進行串流擷取的 Amazon MSK身分驗證。

    AUTHENTICATION_ARN 指定您用來建立加密連線ARN的ACM相互傳輸層安全 (mTLS) 憑證的 。

    SECRET_ARN 指定包含 Amazon Redshift 要用於 m 的憑證之 AWS Secrets Manager 秘密的英文TLS。

    下列範例示範如何在建立外部結構描述時設定 URI Amazon MSK叢集的代理程式:

    CREATE EXTERNAL SCHEMA my_schema FROM MSK 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 MSK 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 MSK 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 'ssm-secret-arn' ];

    如需建立外部結構描述的詳細資訊,請參閱 CREATE EXTERNAL SCHEMA

  5. 建立具體化視觀表以取用主題的資料。使用 SQL命令,例如下列範例。

    CREATE MATERIALIZED VIEW MyView AUTO REFRESH YES AS SELECT * FROM MySchema."mytopic";

    Kafka 主題名稱會區分大小寫,且可同時包含大寫和小寫字母。若要從具有大寫名稱的主題擷取,您可以在enable_case_sensitive_identifiertrue工作階段或資料庫層級將組態設定為 。如需詳細資訊,請參閱名稱和識別碼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 沒有時區的時間戳記 重新整理的開始時間

    請務必注意,如果您的具體化視觀定義中有業務邏輯,這會導致業務邏輯錯誤,這在某些情況下可能會導致串流擷取失敗。這可能會導致您必須捨棄並重新建立具體化視觀表。為了避免這種情況,我們建議您讓業務邏輯保持簡單,並在擷取資料後對資料執行其他邏輯。

  6. 重新整理檢視,這會調用 Amazon Redshift 從主題讀取,並將資料載入具體化視觀表。

    REFRESH MATERIALIZED VIEW MyView;
  7. 查詢具體化視觀表中的資料。

    select * from MyView;

    執行 REFRESH 時,具體化視觀表會直接從主題更新。您可以建立對應至 Kafka 主題資料來源的具體化視觀表。您可以對資料執行篩選和彙總,以做為具體化視觀表定義的一部分。您的串流擷取具體化視觀表 (基礎具體化視觀表) 只能參照一個 Kafka 主題,但是您可以建立與基礎具體化視觀表及其他具體化視觀表或資料表結合的額外具體化視觀表。

如需串流擷取限制的相關資訊,請參閱 串流擷取行為和資料類型