Amazon Athena MSK 커넥터 - Amazon Athena

Amazon Athena MSK 커넥터

Amazon MSK용 Amazon Athena 커넥터를 사용하면 Amazon Athena가 Apache Kafka 주제에 대해 SQL 쿼리를 실행할 수 있습니다. 이 커넥터를 사용하여 Athena에서 Apache Kafka 주제를 테이블로, 메시지를 행으로 볼 수 있습니다. 자세한 내용은 AWS 빅 데이터 블로그에서 Amazon Athena를 사용하여 Amazon MSK에서 실시간 스트리밍 데이터 분석을 참조하세요.

필수 조건

Athena 콘솔 또는 AWS Serverless Application Repository를 사용하여 AWS 계정에 커넥터를 배포합니다. 자세한 내용은 데이터 소스 커넥터 배포 또는 AWS Serverless Application Repository을 사용하여 데이터 원본 커넥터 배포을 참조하세요.

제한 사항

  • DDL 쓰기 작업은 지원되지 않습니다.

  • 모든 관련 Lambda 제한. 자세한 내용은 AWS Lambda 개발자 안내서에서 Lambda 할당량을 참조하십시오.

  • 필터 조건의 날짜 및 타임스탬프 데이터 형식을 적절한 데이터 형식으로 캐스팅해야 합니다.

  • 날짜 및 타임스탬프 데이터 형식은 CSV 파일 형식에 지원되지 않으며 varchar 값으로 처리됩니다.

  • 중첩된 JSON 필드로의 매핑은 지원되지 않습니다. 커넥터는 최상위 필드만 매핑합니다.

  • 커넥터는 복합 유형을 지원하지 않습니다. 복합 형식은 문자열로 해석됩니다.

  • 복잡한 JSON 값을 추출하거나 사용하려면 Athena에서 제공되는 JSON 관련 함수를 사용하세요. 자세한 내용은 문자열에서 JSON 데이터 추출 단원을 참조하십시오.

  • 커넥터는 Kafka 메시지 메타데이터에 대한 액세스를 지원하지 않습니다.

용어

  • 메타데이터 핸들러 - 데이터베이스 인스턴스에서 메타데이터를 검색하는 Lambda 핸들러.

  • 레코드 핸들러 - 데이터베이스 인스턴스에서 데이터 레코드를 검색하는 Lambda 핸들러.

  • 복합 핸들러 - 데이터베이스 인스턴스에서 메타데이터와 데이터 레코드를 모두 검색하는 Lambda 핸들러.

  • Kafka 엔드포인트 - Kafka 인스턴스에 연결하는 텍스트 문자열입니다.

클러스터 호환성

MSK 커넥터는 다음과 같은 클러스터 유형과 함께 사용할 수 있습니다.

  • MSK 프로비저닝 클러스터 - 클러스터 용량을 수동으로 지정, 모니터링 및 조정합니다.

  • MSK 서버리스 클러스터 - 애플리케이션 I/O가 확장되면 자동으로 확장되는 온디맨드 용량을 제공합니다.

  • 독립 실행형 Kafka - Kafka에 대한 직접 연결(인증된 연결 또는 인증되지 않은 연결)입니다.

지원되는 인증 방법

커넥터에서 지원되는 인증 방법은 다음과 같습니다.

지원되는 입력 데이터 형식

커넥터에서 지원되는 입력 데이터 형식은 다음과 같습니다.

  • JSON

  • CSV

파라미터

이 섹션에 언급된 Lambda 환경 변수를 사용하여 Athena MSK 커넥터를 구성합니다.

  • auth_type - 클러스터의 인증 유형을 지정합니다. 커넥터에서 지원되는 인증 유형은 다음과 같습니다.

    • NO_AUTH - 인증 없이 Kafka에 직접 연결합니다. 예를 들어 인증을 사용하지 않는 EC2 인스턴스를 통해 배포되는 Kafka 클러스터에 연결합니다.

    • SASL_SSL_PLAIN - 이 메서드는 SASL_SSL 보안 프로토콜과 PLAIN SASL 메커니즘을 사용합니다.

    • SASL_PLAINTEXT_PLAIN - 이 메서드는 SASL_PLAINTEXT 보안 프로토콜과 PLAIN SASL 메커니즘을 사용합니다.

      참고

      SASL_SSL_PLAINSASL_PLAINTEXT_PLAIN 인증 유형은 Apache Kafka에서 지원되지만 Amazon MSK에서는 지원되지 않습니다.

    • SASL_SSL_AWS_MSK_IAM - Amazon MSK용 IAM 액세스 제어를 사용하여 MSK 클러스터에 대한 인증과 권한 부여를 모두 처리할 수 있습니다. 사용자 AWS 보안 인증(비밀 키 및 액세스 키)은 클러스터에 연결하는 데 사용됩니다. 자세한 내용은 Amazon Managed Streaming for Apache Kafka 개발자 안내서의 IAM 액세스 제어를 참조하세요.

    • SASL_SSL_SCRAM_SHA512 - 이 인증 유형을 사용하여 Amazon MSK 클러스터에 대한 액세스를 제어할 수 있습니다. 이 메서드는 사용자 이름과 암호를 AWS Secrets Manager에 저장합니다. 보안 암호를 Amazon MSK 클러스터와 연결해야 합니다. 자세한 내용은 Amazon Managed Streaming for Apache Kafka 개발자 안내서의 Amazon MSK 클러스터에 대한 SASL/SCRAM 인증 설정을 참조하세요.

    • SSL - SSL 인증은 키 스토어 및 트러스트 스토어 파일을 사용하여 Amazon MSK 클러스터와 연결합니다. 트러스트 스토어 파일과 키 스토어 파일을 생성하여 Amazon S3 버킷에 업로드하고 커넥터를 배포할 때 Amazon S3에 대한 참조를 제공해야 합니다. 키 스토어, 트러스트 스토어 및 SSL 키는 AWS Secrets Manager에 저장됩니다. 커넥터가 배포될 때 클라이언트가 AWS 보안 암호 키를 제공해야 합니다. 자세한 내용은 Amazon Managed Streaming for Apache Kafka 개발자 안내서의 상호 TLS 인증을 참조하세요.

      자세한 내용은 Athena MSK 커넥터에 대한 인증 구성 단원을 참조하십시오.

  • certificates_s3_reference - 인증서(키 스토어 및 트러스트 스토어 파일)가 들어 있는 Amazon S3 위치입니다.

  • disable_spill_encryption – (선택 사항) True로 설정하면 유출 암호화가 비활성화됩니다. S3로 유출되는 데이터가 AES-GCM을 사용하여 암호화되도록 기본값은 False입니다(임의로 생성된 키 또는 KMS를 사용하여 키 생성). 유출 암호화를 비활성화하면 특히 유출 위치가 서버 측 암호화를 사용하는 경우 성능이 향상될 수 있습니다.

  • kafka_endpoint - Kafka에 제공할 엔드포인트 세부 정보입니다. 예를 들어 Amazon MSK 클러스터의 경우 클러스터의 부트스트랩 URL을 제공합니다.

  • secrets_manager_secret - 보안 인증이 저장되는 AWS 보안 암호의 이름입니다. IAM 인증에는 이 파라미터가 필요하지 않습니다.

  • 유출 파라미터 - Lambda 함수는 메모리에 맞지 않는 데이터를 Amazon S3에 임시로 저장(“유출”)합니다. 동일한 Lambda 함수에서 액세스하는 모든 데이터베이스 인스턴스는 동일한 위치로 유출됩니다. 다음 표의 파라미터를 사용하여 유출 위치를 지정합니다.

    파라미터 설명
    spill_bucket 필수 사항입니다. Lambda 함수가 데이터를 유출할 수 있는 Amazon S3 버킷의 이름입니다.
    spill_prefix 필수 사항입니다. Lambda 함수가 데이터를 유출할 수 있는 유출 버킷 내 접두사입니다.
    spill_put_request_headers (선택 사항) 유출에 사용되는 Amazon S3 putObject 요청에 대한 요청 헤더 및 값의 JSON 인코딩 맵(예: {"x-amz-server-side-encryption" : "AES256"}). 다른 가능한 헤더를 알아보려면 Amazon Simple Storage Service API Reference(Amazon Simple Storage Service API 참조)의 PutObject를 참조하세요.

데이터 형식 지원

다음 표에 Kafka와 Apache Arrow에 대해 지원되는 해당 데이터 형식이 나와 있습니다.

Kafka 화살표
CHAR VARCHAR
VARCHAR VARCHAR
TIMESTAMP MILLISECOND
날짜 DAY
BOOLEAN BOOL
SMALLINT SMALLINT
INTEGER INT
BIGINT BIGINT
DECIMAL FLOAT8
DOUBLE FLOAT8

파티션 및 분할

Kafka 주제는 파티션으로 분할됩니다. 각 파티션은 순서대로 정렬됩니다. 파티션의 각 메시지에는 offset이라는 증분 ID가 있습니다. 각 Kafka 파티션은 병렬 처리를 위해 다시 여러 영역으로 분할됩니다. 데이터는 Kafka 클러스터에 구성된 보존 기간 동안 사용할 수 있습니다.

모범 사례

다음 예와 같이 Athena를 쿼리할 때 조건자 푸시다운을 사용하는 것이 좋습니다.

SELECT * FROM "msk_catalog_name"."glue_schema_registry_name"."glue_schema_name" WHERE integercol = 2147483647
SELECT * FROM "msk_catalog_name"."glue_schema_registry_name"."glue_schema_name" WHERE timestampcol >= TIMESTAMP '2018-03-25 07:30:58.878'

MSK 커넥터 설정

커넥터를 사용하려면 먼저 Amazon MSK 클러스터를 설정하고, AWS Glue 스키마 레지스트리를 사용하여 스키마를 정의하고, 커넥터에 대한 인증을 구성해야 합니다.

참고

프라이빗 리소스에 액세스하기 위해 커넥터를 VPC에 배포하고 Confluent와 같이 공개적으로 액세스 가능한 서비스에도 연결하려는 경우 커넥터를 NAT 게이트웨이가 있는 프라이빗 서브넷과 연결해야 합니다. 자세한 정보는 Amazon VPC 사용 설명서의 NAT 게이트웨이를 참조하세요.

AWS Glue Schema Registry에서 작업할 경우 다음 사항에 유의하세요.

  • AWS Glue Schema Registry의 Description(설명) 필드에 있는 텍스트에 {AthenaFederationMSK} 문자열이 포함되어 있는지 확인합니다. 이 마커 문자열은 Amazon Athena MSK 커넥터와 함께 사용하는 AWS Glue 레지스트리에 필요합니다.

  • 최상의 성능을 얻으려면 데이터베이스 이름과 테이블 이름에 소문자만 사용합니다. 대/소문자를 혼합하여 사용하면 커넥터에서 대소문자를 구분하지 않고 검색하므로 더욱 컴퓨팅 집약적입니다.

Amazon MSK 환경 및 AWS Glue Schema Registry를 설정하려면
  1. Amazon MSK 환경을 설정합니다. 자세한 내용은 Amazon Managed Streaming for Apache Kafka 개발자 안내서의 Amazon MSK 설정Amazon MSK 사용 시작하기를 참조하세요.

  2. JSON 형식의 Kafka 주제 설명 파일, 즉, 스키마를 AWS Glue Schema Registry에 업로드합니다. 자세한 내용은 AWS Glue 개발자 안내서의 AWS Glue Schema Registry와 통합을 참조하세요. 스키마 예는 다음 단원을 참조하세요.

스키마를 AWS Glue Schema Registry에 업로드할 경우 이 단원의 예제 형식을 사용하세요.

JSON 유형 스키마 예

다음 예제에서 AWS Glue Schema Registry에서 생성할 스키마는 jsondataFormat의 값으로 지정하고 datatypejsontopicName에 사용합니다.

참고

topicName의 값에서는 Kafka의 주제 이름과 동일한 대/소문자를 사용해야 합니다.

{ "topicName": "datatypejson", "message": { "dataFormat": "json", "fields": [ { "name": "intcol", "mapping": "intcol", "type": "INTEGER" }, { "name": "varcharcol", "mapping": "varcharcol", "type": "VARCHAR" }, { "name": "booleancol", "mapping": "booleancol", "type": "BOOLEAN" }, { "name": "bigintcol", "mapping": "bigintcol", "type": "BIGINT" }, { "name": "doublecol", "mapping": "doublecol", "type": "DOUBLE" }, { "name": "smallintcol", "mapping": "smallintcol", "type": "SMALLINT" }, { "name": "tinyintcol", "mapping": "tinyintcol", "type": "TINYINT" }, { "name": "datecol", "mapping": "datecol", "type": "DATE", "formatHint": "yyyy-MM-dd" }, { "name": "timestampcol", "mapping": "timestampcol", "type": "TIMESTAMP", "formatHint": "yyyy-MM-dd HH:mm:ss.SSS" } ] } }

CSV 유형 스키마 예

다음 예제에서 AWS Glue Schema Registry에서 생성할 스키마는 csvdataFormat의 값으로 지정하고 datatypecsvbulktopicName에 사용합니다. topicName의 값에서는 Kafka의 주제 이름과 동일한 대/소문자를 사용해야 합니다.

{ "topicName": "datatypecsvbulk", "message": { "dataFormat": "csv", "fields": [ { "name": "intcol", "type": "INTEGER", "mapping": "0" }, { "name": "varcharcol", "type": "VARCHAR", "mapping": "1" }, { "name": "booleancol", "type": "BOOLEAN", "mapping": "2" }, { "name": "bigintcol", "type": "BIGINT", "mapping": "3" }, { "name": "doublecol", "type": "DOUBLE", "mapping": "4" }, { "name": "smallintcol", "type": "SMALLINT", "mapping": "5" }, { "name": "tinyintcol", "type": "TINYINT", "mapping": "6" }, { "name": "floatcol", "type": "DOUBLE", "mapping": "7" } ] } }

Athena MSK 커넥터에 대한 인증 구성

IAM, SSL, SCRAM, 독립 실행형 Kafka를 비롯한 다양한 방법으로 Amazon MSK 클러스터에 인증할 수 있습니다.

다음 표에는 커넥터의 인증 유형과 각 유형에 대한 보안 프로토콜 및 SASL 메커니즘이 나와 있습니다. 자세한 내용은 Amazon Managed Streaming for Apache Kafka 개발자 안내서의 Apache Kafka API에 대한 인증 및 권한 부여를 참조하세요.

auth_type security.protocol sasl.mechanism
SASL_SSL_PLAIN SASL_SSL PLAIN
SASL_PLAINTEXT_PLAIN SASL_PLAINTEXT PLAIN
SASL_SSL_AWS_MSK_IAM SASL_SSL AWS_MSK_IAM
SASL_SSL_SCRAM_SHA512 SASL_SSL SCRAM-SHA-512
SSL SSL N/A
참고

SASL_SSL_PLAINSASL_PLAINTEXT_PLAIN 인증 유형은 Apache Kafka에서 지원되지만 Amazon MSK에서는 지원되지 않습니다.

SASL/IAM

클러스터에서 IAM 인증을 사용하는 경우 클러스터를 설정할 때 사용자에 대한 IAM 정책을 구성해야 합니다. 자세한 내용은 Amazon Managed Streaming for Apache Kafka 개발자 안내서의 IAM 액세스 제어를 참조하세요.

이 인증 유형을 사용하려면 커넥터에 대한 auth_type Lambda 환경 변수를 SASL_SSL_AWS_MSK_IAM으로 설정합니다.

SSL

클러스터가 SSL 인증을 받은 경우 트러스트 스토어와 키 스토어 파일을 생성하여 Amazon S3 버킷에 업로드해야 합니다. 커넥터를 배포할 때 이 Amazon S3 참조를 제공해야 합니다. 키 스토어, 트러스트 스토어 및 SSL 키는 AWS Secrets Manager에 저장됩니다. 커넥터를 배포할 때 AWS 비밀 키를 제공합니다.

Secrets Manager에서 보안 암호를 생성하는 방법에 대한 자세한 내용은 AWS Secrets Manager 보안 암호 생성을 참조하세요.

이 인증 유형을 사용하려면 다음 표에 표시된 대로 환경 변수를 설정합니다.

파라미터
auth_type SSL
certificates_s3_reference 인증서가 포함된 Amazon S3 위치입니다.
secrets_manager_secret AWS 비밀 키의 이름입니다.

Secrets Manager에서 보안 암호를 생성한 이후에 Secrets Manager 콘솔에서 보안 암호를 볼 수 있습니다.

Secrets Manager에서 보안 암호를 보려면
  1. https://console.aws.amazon.com/secretsmanager/에서 Secrets Manager 콘솔을 엽니다.

  2. 탐색 창에서 Secrets(보안 암호)를 선택합니다.

  3. Secrets(보안 암호) 페이지에서 보안 암호에 대한 링크를 선택합니다.

  4. 보안 암호에 대한 세부 정보 페이지에서 Retrieve secret value(보안 암호 값 검색)를 선택합니다.

    다음 이미지는 세 개의 키/값 쌍(keystore_password, truststore_password, ssl_key_password)을 가진 보안 암호의 예를 보여줍니다.

    Secrets Manager에서 SSL 보안 암호 검색

SASL/SCRAM

클러스터에서 SCRAM 인증을 사용하는 경우 커넥터를 배포할 때 클러스터와 연결되는 Secrets Manager 키를 제공합니다. 사용자의 AWS 보안 인증(비밀 키 및 액세스 키)은 클러스터에 인증하는 데 사용됩니다.

다음 표에 표시된 대로 환경 변수를 설정합니다.

파라미터
auth_type SASL_SSL_SCRAM_SHA512
secrets_manager_secret AWS 비밀 키의 이름입니다.

다음 이미지는 Secrets Manager 콘솔에서 usernamepassword에 대해 하나씩 두 개의 키/값 쌍으로 구성된 보안 암호의 예를 보여줍니다.

Secrets Manager에서 SCRAM 보안 암호 검색

라이선스 정보

이 커넥터를 사용하면 이 커넥터에 대한 pom.xml 파일에서 목록을 찾을 수 있는 타사 구성 요소가 포함되어 있음을 인정하고 GitHub.com의 LICENSE.txt 파일에 제공된 해당 타사 라이선스의 조건에 동의하는 것으로 간주됩니다.

추가적인 리소스

이 커넥터에 대한 추가 정보를 알아보려면 GitHub.com의 해당 사이트를 참조하세요.