Amazon Managed Streaming for Apache Kafka에서 스트리밍 수집 시작 - Amazon Redshift

Amazon Managed Streaming for Apache Kafka에서 스트리밍 수집 시작

Amazon Redshift 스트리밍 수집의 목적은 스트리밍 서비스에서 Amazon Redshift 또는 Amazon Redshift Serverless로 스트림 데이터를 직접 수집하는 프로세스를 단순화하는 것입니다. 이는 아마존 MSK 및 아마존 MSK Serverless와 Kinesis에서 작동합니다. Redshift 스트리밍 수집을 사용하면 스트림 데이터를 Amazon Redshift로 수집하기 전에 Amazon S3에서 Kinesis Data Streams 스트림 또는 Amazon MSK 주제를 준비할 필요가 없습니다.

기술적인 수준에서 Amazon Kinesis Data Streams 및 Amazon Managed Streaming for Apache Kafka의 스트리밍 수집은 스트림 또는 주제 데이터를 Amazon Redshift 구체화 보기로 짧은 지연 시간, 고속 수집을 제공합니다. 설정 후 구체화된 뷰 새로 고침을 사용하여 대용량 데이터를 가져올 수 있습니다.

다음 단계를 수행하여 Amazon MSK에 대한 Amazon Redshift 스트리밍 수집을 설정합니다.

  1. 스트리밍 데이터 소스에 매핑되는 외부 스키마를 만듭니다.

  2. 외부 스키마를 참조하는 구체화된 뷰를 생성합니다.

Amazon Redshift 스트리밍 수집을 구성하려면 먼저 Amazon MSK 소스를 사용할 수 있어야 합니다. 소스가 없는 경우 Amazon MSK 사용 시작에 나와 있는 지침을 따르세요.

참고

스트리밍 수집 및 Amazon Redshift Serverless -이 주제의 구성 단계는 프로비저닝된 Amazon Redshift 클러스터와 Amazon Redshift Serverless 모두에 적용됩니다. 자세한 내용은 스트리밍 수집 고려 사항 단원을 참조하십시오.

IAM 설정 및 Kafka에서 스트리밍 수집 수행

사용 가능한 Amazon MSK 클러스터가 있다고 가정하면 첫 번째 단계는 CREATE EXTERNAL SCHEMA를 사용하여 Redshift에서 스키마를 정의하고 Kafka 주제를 데이터 소스로 참조하는 것입니다. 그런 다음 주제의 데이터에 액세스하려면 구체화된 뷰에서 STREAM을 정의합니다. 반정형 SUPER 형식에 있는 주제의 레코드를 저장하거나 Amazon Redshift 데이터 형식으로 변환되는 데이터를 생성하는 스키마를 정의할 수 있습니다. 구체화된 뷰를 쿼리할 때 반환된 레코드는 주제의 특정 시점 보기입니다.

  1. Amazon Redshift 클러스터 또는 Amazon Redshift Serverless 가 이 역할을 수임하도록 허용하는 신뢰 정책으로 IAM 역할을 생성합니다. IAM 역할에 대한 신뢰 정책을 구성하는 방법에 대한 자세한 내용은 Amazon Redshift가 사용자를 대신하여 다른 AWS 서비스에 액세스할 수 있도록 권한 부여 섹션을 참조하세요. 역할이 생성된 후에는 Amazon MSK 클러스터와의 통신 권한을 제공하는 다음 IAM 정책이 있어야 합니다. 필요한 정책은 Amazon MSK를 사용하는 경우 클러스터에서 사용되는 인증 방법에 따라 다릅니다. Amazon MSK에서 사용할 수 있는 인증 방법은 Apache Kafka API에 대한 인증 및 권한 부여를 참조하세요.

    인증되지 않은 액세스를 사용하는 Amazon MSK의 IAM 정책:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "kafka:GetBootstrapBrokers" ], "Resource": "*" } ] }

    IAM 인증을 사용하는 경우의 Amazon MSK에 대한 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/*" ] }, { "Sid": "MSKPolicy", "Effect": "Allow", "Action": [ "kafka:GetBootstrapBrokers" ], "Resource": "*" } ] }
  2. VPC 확인하고 Amazon Redshift 클러스터 또는 Amazon Redshift Serverless에 Amazon MSK 클러스터로 연결되는 경로가 있는지 확인하세요. Amazon MSK 클러스터에 대한 인바운드 보안 그룹 규칙은 Amazon Redshift 클러스터 또는 Amazon Redshift Serverless 작업 그룹의 보안 그룹을 허용해야 합니다. 지정하는 포트는 Amazon MSK를 사용하는 경우 클러스터에 사용되는 인증 방법에 따라 다릅니다. 자세한 내용은 포트 정보AWS 내에서 그러나 VPC 외부에서 액세스를 참조하세요.

    스트리밍 수집에는 mTLS를 이용한 클라이언트 인증이 지원되지 않습니다. 자세한 내용은 제한 사항을 참조하세요.

    다음 테이블에는 Amazon MSK에서 스트리밍 수집을 위해 설정할 수 있는 무료 구성 옵션이 나와 있습니다.

    Amazon Redshift 구성 Amazon MSK 구성 Redshift와 Amazon MSK 간에 열 포트
    AUTHENTICATION NONE TLS 전송 비활성화됨 9092
    AUTHENTICATION NONE TLS 전송 활성화됨 9094
    AUTHENTICATION IAM IAM 9098/9198

    Amazon Redshift 인증은 CREATE EXTERNAL SCHEMA 문에서 설정합니다.

    Amazon MSK 클러스터에 mTLS(상호 전송 계층 보안) 인증이 활성화되어 있는 경우, 인증 없음을 사용하도록 Amazon Redshift를 구성하면 인증되지 않은 액세스를 위해 포트 9094를 사용하도록 지시합니다. 그러나 이 포트는 mTLS 인증에서 사용 중이므로 실패합니다. 따라서 mTLS를 사용할 때는 인증 IAM으로 전환하는 것이 좋습니다.

  3. Amazon Redshift 클러스터 또는 Amazon Redshift Serverless 작업 그룹에서 향상된 VPC 라우팅을 사용하도록 설정합니다. 자세한 내용은 향상된 VPC 라우팅을 참조하세요.

    참고

    Amazon Redshift는 Amazon MSK 부트스트랩 브로커 URL을 검색하기 위해 첨부된 IAM 역할에서 제공하는 권한을 사용하여 GetBootstrapBrokers API를 직접 호출합니다. 단, 향상된 VPC 라우팅이 활성화되었을 때 이 요청이 성공하려면 Amazon Redshift 프로비저닝 클러스터 또는 Amazon Redshift Serverless 작업 그룹의 서브넷에 NAT 게이트웨이 또는 인터넷 게이트웨이가 있어야 합니다. 앞서 언급한 서브넷의 네트워크 ACL 및 보안 그룹 아웃바운드 규칙으로 Amazon MSK API 서비스 엔드포인트에 대한 액세스도 허용해야 합니다. 자세한 내용은 Amazon Managed Streaming for Apache Kafka 엔드포인트 및 할당량을 참조하세요.

  4. Amazon Redshift에서 Amazon MSK 클러스터에 매핑할 외부 스키마를 생성합니다.

    CREATE EXTERNAL SCHEMA MySchema FROM MSK IAM_ROLE { default | 'iam-role-arn' } AUTHENTICATION { none | iam } CLUSTER_ARN 'msk-cluster-arn';

    FROM 절에서 Amazon MSK는 스키마가 관리형 Kafka 서비스의 데이터를 매핑함을 나타냅니다.

    Amazon MSK용 스트리밍 수집은 외부 스키마를 생성할 때 다음 인증 유형을 제공합니다.

    • none - 인증 단계가 없다고 지정합니다.

    • iam - IAM 인증을 지정합니다. 이 항목을 선택할 때는 IAM 역할에 IAM 인증 권한이 있는지 확인해야 합니다.

    TLS 인증이나 사용자 이름 및 암호 같은 추가 Amazon MSK 인증 방법은 스트리밍 수집에 지원되지 않습니다.

    CLUSTER_ARN은 스트리밍의 출처인 Amazon MSK 클러스터를 지정합니다.

  5. 스트림 데이터를 소비할 구체화된 뷰를 생성합니다. 오류 레코드를 건너뛰지 않으려면 이 샘플과 같은 SQL 명령을 사용하세요.

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

    다음 예에서는 JSON 소스 데이터를 사용하여 구체화된 보기를 정의합니다. 다음 보기에서는 데이터가 유효한 JSON 및 utf8인지 검증합니다. Kafka 주제 이름은 대소문자를 구분하며 대문자와 소문자를 모두 포함할 수 있습니다. 대문자 이름을 가진 주제에서 수집하려면 데이터베이스 수준에서 enable_case_sensitive_identifier 구성을 true로 설정하면 됩니다. 자세한 내용은 이름 및 식별자enable_case_sensitive_identifier 섹션을 참조하세요.

    CREATE MATERIALIZED VIEW MyView AUTO REFRESH YES AS SELECT kafka_partition, kafka_offset, kafka_timestamp_type, kafka_timestamp, kafka_key, JSON_PARSE(kafka_value) as kafka_data, kafka_headers, refresh_time FROM MySchema."mytopic" WHERE CAN_JSON_PARSE(kafka_value);

    자동 새로 고침을 켜려면 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 새로 고침의 시작 시간

    구체화된 뷰 정의에 비즈니스 로직이 있는 경우 비즈니스 로직 오류로 인해 경우에 따라 스트리밍 수집이 차단될 수 있다는 점에 유의해야 합니다. 이로 인해 구체화된 뷰를 삭제하고 다시 생성해야 할 수도 있습니다. 이를 방지하려면 비즈니스 로직을 단순하게 유지하고 수집 후 데이터에 대한 추가 로직을 실행하는 것이 좋습니다.

  6. 뷰를 새로 고치면 Amazon Redshift Redshift가 주제에서 읽고 데이터를 구체화된 뷰로 로드하도록 트리거합니다.

    REFRESH MATERIALIZED VIEW MyView;
  7. 구체화된 보기의 데이터를 쿼리합니다.

    select * from MyView;

    구체화된 뷰는 REFRESH 실행 시 주제에서 직접 업데이트됩니다. Kafka 주제 데이터 소스에 매핑되는 구체화된 뷰를 생성합니다. 구체화된 뷰 정의의 일부로 데이터에 대한 필터링 및 합계를 수행할 수 있습니다. 스트리밍 수집 구체화된 뷰(기본 구체화된 뷰)는 하나의 Kafka 주제만 참조할 수 있지만 기본 구체화된 뷰 및 기타 구체화된 뷰 또는 테이블과 조인하는 구체화된 뷰를 추가로 생성할 수 있습니다.

스트리밍 수집 제한 사항에 대한 자세한 내용은 고려 사항 단원을 참조하세요.