Amazon Athena Apache Kafka 커넥터 - Amazon Athena

Amazon Athena Apache Kafka 커넥터

Apache Kafka용 Amazon Athena 커넥터를 사용하면 Amazon Athena가 Apache Kafka 주제에서 SQL 쿼리를 실행할 수 있습니다. 이 커넥터를 사용하여 Athena에서 Apache Kafka 주제를 테이블로, 메시지를 행으로 볼 수 있습니다.

필수 조건

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 인스턴스에 연결하는 텍스트 문자열입니다.

클러스터 호환성

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

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

  • Confluent – Confluent Kafka에 대한 직접 연결입니다. Confluent Kafka 데이터와 함께 Athena를 사용하는 방법에 대한 자세한 내용은 AWS 비즈니스 인텔리전스 블로그Visualize Confluent data in Amazon QuickSight using Amazon Athena를 참조하세요.

Confluent에 연결

Confluent에 연결하려면 다음 단계를 수행해야 합니다.

  1. Confluent에서 API 키를 생성합니다.

  2. Confluent API 키의 사용자 이름과 암호를 AWS Secrets Manager에 저장합니다.

  3. Kafka 커넥터에 secrets_manager_secret 환경 변수의 보안 암호 이름을 입력합니다.

  4. 이 문서의 Kafka 커넥터 설정 섹션에 나온 단계를 수행합니다.

지원되는 인증 방법

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

  • SSL

  • SASL/SCRAM

  • SASL/PLAIN

  • SASL/PLAINTEXT

  • NO_AUTH

  • 자체 관리형 Kafka 및 Confluent 플랫폼 – SSL, SASL/SCRAM, SASL/PLAINTEXT, NO_AUTH

  • 자체 관리형 Kafka 및 Confluent 플랫폼 – SASL/PLAIN

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

지원되는 입력 데이터 형식

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

  • JSON

  • CSV

파라미터

이 섹션의 Lambda 환경 변수를 사용하여 Athena Kafka 커넥터를 구성합니다.

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

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

    • SASL_SSL_PLAIN - 이 메서드는 SASL_SSL 보안 프로토콜과 PLAIN SASL 메커니즘을 사용합니다. 자세한 내용은 Apache Kafka 설명서의 SASL configuration을 참조하세요.

    • SASL_PLAINTEXT_PLAIN - 이 메서드는 SASL_PLAINTEXT 보안 프로토콜과 PLAIN SASL 메커니즘을 사용합니다. 자세한 내용은 Apache Kafka 설명서의 SASL configuration을 참조하세요.

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

    • SASL_PLAINTEXT_SCRAM_SHA512 – 이 메서드는 SASL_PLAINTEXT 보안 프로토콜 및 SCRAM_SHA512 SASL 메커니즘을 사용합니다. 이 메서드는 AWS Secrets Manager에 저장된 사용자 이름과 암호를 사용합니다. 자세한 내용은 Apache Kafka 설명서의 SASL configuration 섹션을 참조하세요.

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

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

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

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

  • kafka_endpoint - Kafka에 제공할 엔드포인트 세부 정보입니다.

  • secrets_manager_secret - 보안 인증이 저장되는 AWS 보안 암호의 이름입니다.

  • 유출 파라미터 - 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를 참조하세요.
  • 서브넷 ID – Lambda 함수가 데이터 소스에 액세스하는 데 사용할 수 있는 서브넷에 해당하는 하나 이상의 서브넷 ID입니다.

    • 퍼블릭 Kafka 클러스터 또는 표준 Confluent Cloud 클러스터 - 커넥터를 NAT 게이트웨이가 있는 프라이빗 서브넷에 연결합니다.

    • 프라이빗 연결을 제공하는 Confluent Cloud 클러스터 - Confluent Cloud 클러스터로 연결되는 경로가 있는 프라이빗 서브넷에 커넥터를 연결합니다.

      • AWS Transit Gateway의 경우 서브넷은 Confluent Cloud가 사용하는 것과 동일한 전송 게이트웨이에 연결된 VPC에 있어야 합니다.

      • VPC 피어링의 경우 서브넷은 Confluent Cloud VPC에 피어링된 VPC에 있어야 합니다.

      • AWS PrivateLink의 경우 서브넷은 Confluent Cloud에 연결된 VPC 엔드포인트로 연결되는 경로가 있는 VPC에 있어야 합니다.

참고

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

데이터 형식 지원

다음 표에 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 "kafka_catalog_name"."glue_schema_registry_name"."glue_schema_name" WHERE integercol = 2147483647
SELECT * FROM "kafka_catalog_name"."glue_schema_registry_name"."glue_schema_name" WHERE timestampcol >= TIMESTAMP '2018-03-25 07:30:58.878'

Kafka 커넥터 설정

커넥터를 사용하려면 먼저 Apache Kafka 클러스터를 설정하고, AWS Glue Schema Registry를 사용하여 스키마를 정의하고, 커넥터에 대한 인증을 구성해야 합니다.

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

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

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

Apache Kafka 환경 및 AWS Glue Schema Registry를 설정하려면
  1. Apache Kafka 환경을 설정합니다.

  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 Kafka 커넥터에 대한 인증 구성

SSL, SASL/SCRAM, SASL/PLAIN, SASL/PLAINTEXT를 비롯한 다양한 방법을 사용하여 Apache Kafka 클러스터에 대한 인증을 수행할 수 있습니다.

다음 표에는 커넥터의 인증 유형과 각 유형에 대한 보안 프로토콜 및 SASL 메커니즘이 나와 있습니다. 자세한 내용은 Apache Kafka 설명서의 Security 섹션을 참조하세요.

auth_type security.protocol sasl.mechanism 클러스터 유형 호환성
SASL_SSL_PLAIN SASL_SSL PLAIN
  • 자체 관리형 Kafka

  • Confluent 플랫폼

  • Confluent Cloud

SASL_PLAINTEXT_PLAIN SASL_PLAINTEXT PLAIN
  • 자체 관리형 Kafka

  • Confluent 플랫폼

SASL_SSL_SCRAM_SHA512 SASL_SSL SCRAM-SHA-512
  • 자체 관리형 Kafka

  • Confluent 플랫폼

SASL_PLAINTEXT_SCRAM_SHA512 SASL_PLAINTEXT SCRAM-SHA-512
  • 자체 관리형 Kafka

  • Confluent 플랫폼

SSL SSL N/A
  • 자체 관리형 Kafka

  • Confluent 플랫폼

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 보안 암호 검색

Kafka에서 SSL을 사용하는 방법에 대한 자세한 내용은 Apache Kafka 설명서의 Encryption and Authentication using SSL을 참조하세요.

SASL/SCRAM

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

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

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

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

Secrets Manager에서 SCRAM 보안 암호 검색

Kafka에서 SASL/SCRAM을 사용하는 방법에 대한 자세한 내용은 Apache Kafka 설명서의 Authentication using SASL/SCRAM을 참조하세요.

라이선스 정보

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

추가적인 리소스

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