

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# 開始從 Apache Kafka 來源進行串流擷取
<a name="materialized-view-streaming-ingestion-getting-started-MSK"></a>

本主題說明如何使用具體化視觀表從 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](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html)
+ **Apache Kafka** - [Apache Kafka 快速入門](https://kafka.apache.org/quickstart)
+ **Confluent Cloud** - [Confluent Cloud 快速入門](https://docs.confluent.io/cloud/current/get-started/index.html)

## 設定從 Kafka 執行串流擷取
<a name="materialized-view-streaming-ingestion-getting-started-MSK-setup"></a>

使用下列程序設定從 Amazon MSK 或非 AWS受管 Apache Kafka 來源 (Apache Kafka 和 Confluent Cloud) 串流擷取至 Amazon Redshift。

**Topics**
+ [設定身分驗證](#materialized-view-streaming-ingestion-getting-started-MSK-setup-auth)
+ [設定您的 VPC](#materialized-view-streaming-ingestion-getting-started-MSK-Setup-VPC)
+ [建立具體化視觀表](#materialized-view-streaming-ingestion-getting-started-MSK-setup-materialized-view)

### 設定身分驗證
<a name="materialized-view-streaming-ingestion-getting-started-MSK-setup-auth"></a>

本節說明設定身分驗證，以允許 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)：**

------
#### [ JSON ]

****  

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

------

**驗證 MTLS：使用存放在 中的憑證 AWS Certificate Manager**

------
#### [ JSON ]

****  

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

------

**驗證 MTLS：使用存放在 中的憑證 AWS Secrets Manager**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "MSKmTLSSecretsManagerpolicy",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue" 
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:444455556666:secret:secret_ID"
            ]
        }
    ]
}
```

------

------
#### [ Amazon MSK ]

如果您使用 AUTHENTICATION NONE 連線到 Amazon MSK 來源，則不需要 IAM 角色。不過，如果您使用 AUTHENTICATION IAM 或 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 服務](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html)。

下表顯示可從 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 身份驗證是在 CREATE EXTERNAL SCHEMA 陳述式中設定的。

**注意**  
如果 Amazon MSK 叢集已啟用相互傳輸層安全性 (mTLS) 身份驗證，則將 Amazon Redshift 設定為使用 AUTHENTICATION NONE 會指示其使用連接埠 9094 進行未驗證的存取。但是，這將會失敗，因為 mTLS 身份驗證正在使用連接埠。因此，我們建議您在使用 mTLS 時切換到 AUTHENTICATION mtls。

------
#### [ Apache Kafka or Confluent Cloud ]

對於 Apache Kafka 和 Confluent Cloud，Amazon Redshift 支援下列連線通訊協定：
+ 連線至 Apache Kafka 時，您可以使用 mTLS 或純文字搭配 TLS 傳輸進行身分驗證。
+ 連線至 Confluent Cloud 時，您只能使用 mTLS 進行身分驗證。

Amazon Redshift 支援使用下列加密通訊協定連線至 Apache Kafka 和 Confluent Cloud：

**Apache Kafka 和 Confluent Cloud 支援的身分驗證方法**


| Amazon Redshift | Kafka 安全通訊協定 | Apache Kafka 支援 | Confluent Cloud 支援 | 
| --- | --- | --- | --- | 
| AUTHENTICATION NONE | PLAINTEXT | 否 | 否 | 
| AUTHENTICATION NONE | SSL | 是 | 否 | 
| AUTHENTICATION IAM | SASL\_SSL | 否 | 否 | 
| AUTHENTICATION MTLS | SSL | 是 (使用憑證) | 是 (使用憑證) | 

請注意，Amazon Redshift 不支援 SASL/SCRAM 或 SASL/PLAINTEXT。

------

### 設定您的 VPC
<a name="materialized-view-streaming-ingestion-getting-started-MSK-Setup-VPC"></a>

建立身分驗證資源後，請檢查您的 VPC，並確認 Amazon Redshift 叢集或 Amazon Redshift Serverless 工作群組具有通往 Apache Kafka 來源的路由。

**注意**  
對於 Amazon MSK，Amazon MSK 叢集的輸入安全群組規則應允許您的 Amazon Redshift 叢集或 Redshift Serverless 工作群組的安全群組。您指定的連接埠取決於 Amazon MSK 叢集上設定的身分驗證方法。如需詳細資訊，請參閱[連接埠資訊和](https://docs.aws.amazon.com/msk/latest/developerguide/port-info.html)[從 VPC 內部 AWS 外存取](https://docs.aws.amazon.com/msk/latest/developerguide/aws-access.html)。

接著在您的 Amazon Redshift 叢集或 Amazon Redshift Serverless 工作群組上啟用增強型 VPC 路由。如需詳細資訊，請參閱[啟用增強型 VPC 路由](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-enabling-cluster.html)。

### 建立具體化視觀表
<a name="materialized-view-streaming-ingestion-getting-started-MSK-setup-materialized-view"></a>

在本節中，您會設定 Amazon Redshift 用來存取 Apache Kafka 串流資料的具體化視觀表。

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

1. 在 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 執行串流擷取](#materialized-view-streaming-ingestion-getting-started-MSK-setup)。
   + **mtls** - 指定雙向 Transport Layer Security 透過簡化用戶端與伺服器之間的身分驗證來提供安全通訊。在此情況下，用戶端是 Redshift，而伺服器是 Apache Kafka。如需使用 mTLS 設定串流擷取的詳細資訊，請參閱 [從 Apache Kafka 來源執行 Redshift 串流擷取時使用 mTLS 進行身分驗證](materialized-view-streaming-ingestion-mtls.md)。

   請注意，串流擷取不支援使用使用者名稱和密碼的 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](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)。

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

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

   Kafka 主題名稱會區分大小寫，且可同時包含大寫和小寫字母。若要從具有大寫名稱的主題中擷取，您可以在工作階段或資料庫層級將組態 `enable_case_sensitive_identifier` 設定為 `true`。如需詳細資訊，請參閱[名稱和識別碼](https://docs.aws.amazon.com/redshift/latest/dg/r_names.html)與 [enable\_case\_sensitive\_identifier](https://docs.aws.amazon.com/redshift/latest/dg/r_enable_case_sensitive_identifier.html)。

   若要開啟自動重新整理，請使用 `AUTO REFRESH YES`。預設行為是手動重新整理。

1. 中繼資料資料欄包括下列項目：    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/redshift/latest/dg/materialized-view-streaming-ingestion-getting-started-MSK.html)

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

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

   ```
   REFRESH MATERIALIZED VIEW MyView;
   ```

1. 查詢具體化視觀表中的資料。

   ```
   select * from MyView;
   ```

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

如需串流擷取限制的相關資訊，請參閱 [串流擷取行為和資料類型](materialized-view-streaming-ingestion.md#materialized-view-streaming-ingestion-limitations)。