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 스트리밍 수집을 사용하면 Redshift로 스트림 데이터를 수집하기 전에 Amazon S3에서 Apache Kafka 주제를 준비할 필요가 없습니다.
기술적인 수준에서 스트리밍 수집은 짧은 지연 시간의 고속 수집으로 스트림 또는 주제 데이터를 Amazon Redshift 구체화된 뷰에 제공합니다. 설정 후 구체화된 뷰 새로 고침을 사용하여 대용량 데이터를 가져올 수 있습니다.
Amazon Redshift 스트리밍 수집을 구성하려면 먼저 Apache Kafka 소스를 사용할 수 있어야 합니다. 소스가 없는 경우 다음 지침에 따라 소스를 만듭니다.
Amazon MSK - Getting Started Using Amazon MSK
Apache Kafka - Apache Kafka Quickstart
Confluent Cloud - Quick Start for Confluent Cloud
Kafka에서 스트리밍 수집 설정
다음 절차에 따라 AWS 관리형이 아닌 Apache Kafka 소스(Apache Kafka 및 Confluent Cloud)에서 Amazon Redshift로 스트리밍 수집을 설정합니다.
인증 설정
이 섹션에서는 Amazon Redshift 애플리케이션이 Amazon MSK 소스에 액세스하도록 허용하는 인증 설정을 설명합니다.
애플리케이션의 역할을 생성한 후 다음 정책 중 하나를 연결하여 Amazon MSK, Apache Kafka 또는 Confluent Cloud 클러스터에 대한 액세스를 허용합니다. mTLS 인증의 경우 Amazon Redshift가 사용하는 인증서를 ACM 또는 Secrets Manager에 저장할 수 있으므로 인증서가 저장되는 위치와 일치하는 정책을 선택해야 합니다.
AUTHENTICATION IAM(Amazon MSK만 해당):
{ "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" ] } ] }
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 'ssm-secret-arn' ];
FROM
절에서KAFKA
는 스키마가 Apache Kafka 소스의 데이터를 매핑함을 나타냅니다.AUTHENTICATION
은 스트리밍 수집을 위한 인증 유형을 나타냅니다. 사용 가능한 3가지 유형은 다음과 같습니다.none - 필요한 인증이 없다고 지정합니다. 이는 MSK에 대해 인증되지 않은 액세스에 해당합니다. 이는 Apache Kafka의 SSL 인증에 해당합니다. 이 인증 방법은 Confluent Cloud에서 지원되지 않습니다.
iam - IAM 인증을 지정합니다. Amazon MSK에서는 IAM 인증만 사용할 수 있습니다. 이 항목을 선택할 때는 IAM 역할에 IAM 인증 권한이 있는지 확인해야 합니다. 필수 IAM 정책 설정에 관한 자세한 내용은 Kafka에서 스트리밍 수집 설정 섹션을 참조하시기 바랍니다.
mtls - 클라이언트와 서버 간의 인증을 용이하게 하여 상호 전송 계층 보안을 통해 안전한 통신을 제공하도록 지정합니다. 이 경우 클라이언트는 Redshift이고 서버는 Apache Kafka입니다. mTLS를 사용하여 스트리밍 수집 구성에 관한 자세한 내용은 Apache Kafka 소스에서 Redshift 스트리밍 수집을 위한 mTLS 인증 섹션을 참조하시기 바랍니다.
사용자 이름과 암호를 사용한 Amazon MSK 인증은 스트리밍 수집에서 지원되지 않으니 참고합니다.
AUTHENTICATION_ARN
파라미터는 암호화된 연결을 설정하는 데 사용하는 ACM 상호 전송 계층 보안(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 'ssm-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 시간대 미포함 TIMESTAMP timestamp 값의 형식 kafka_key varbyte Kafka 레코드의 핵심 kafka_value varbyte Kafka로부터 받은 레코드 kafka_headers super Kafka로부터 받은 레코드의 헤더 refresh_time 시간대 미포함 TIMESTAMP 새로 고침의 시작 시간 중요한 것은 구체화된 뷰 정의에 비즈니스 로직이 있는 경우 비즈니스 로직 오류로 인해 경우에 따라 스트리밍 수집이 실패할 수 있다는 것입니다. 이로 인해 구체화된 뷰를 삭제하고 다시 생성해야 할 수도 있습니다. 이를 방지하려면 비즈니스 로직을 단순하게 유지하고 수집 후 데이터에 대한 추가 로직을 실행하는 것이 좋습니다.
뷰를 새로 고치면 Amazon Redshift Redshift가 주제에서 읽고 데이터를 구체화된 뷰로 로드하도록 트리거합니다.
REFRESH MATERIALIZED VIEW MyView;
구체화된 보기의 데이터를 쿼리합니다.
select * from MyView;
구체화된 뷰는
REFRESH
실행 시 주제에서 직접 업데이트됩니다. Kafka 주제 데이터 소스에 매핑되는 구체화된 뷰를 생성합니다. 구체화된 뷰 정의의 일부로 데이터에 대한 필터링 및 합계를 수행할 수 있습니다. 스트리밍 수집 구체화된 뷰(기본 구체화된 뷰)는 하나의 Kafka 주제만 참조할 수 있지만 기본 구체화된 뷰 및 기타 구체화된 뷰 또는 테이블과 조인하는 구체화된 뷰를 추가로 생성할 수 있습니다.
스트리밍 수집 제한 사항에 대한 자세한 내용은 스트리밍 모으기 동작 및 데이터 유형 섹션을 참조하세요.