AWS 기술 블로그

Amazon MSK를 이용하여 Amazon Athena로 실시간 스트리밍 데이터 분석하기

이 글은 AWS Big Data Blog 에 게시된 Analyze real-time streaming data in Amazon MSK with Amazon Athena by Scott Rigney and Kiran Matty 을 한국어 번역 및 편집하였습니다.

최근 사용 편의성과 확장성의 발전으로 스트리밍 데이터를 더 쉽게 생성하고 실시간 의사 결정을 위해 사용할 수 있게 되었습니다. 기업이 업계 변화에 더욱 신속하게 대응해야 하는 시장 환경과 맞물려, 오늘날 점점 더 많은 조직이 혁신과 민첩성을 촉진하기 위해 스트리밍 데이터로 전환하고 있습니다.

Amazon Managed Streaming for Apache Kafka (MSK)는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합, 미션 크리티컬 애플리케이션을 위해 설계된 오픈 소스 분산 이벤트 스트리밍 플랫폼인 Apache Kafka를 사용하는 애플리케이션을 쉽게 빌드하고 실행할 수 있는 완전 관리형 서비스입니다.

Amazon MSK를 사용하면 데이터베이스 변경 이벤트나 웹 애플리케이션의 사용자 스트림 등 광범위한 소스에서 실시간 데이터를 캡처할 수 있습니다. Kafka는 새로운 데이터의 쓰기와 읽기에 최적화되어 있으므로 운영 보고에 매우 적합합니다. 그러나 이러한 데이터에서 인사이트를 얻으려면 스트리밍 레코드를 Amazon S3와 같은 저장 매체에 기록하기 위한 스트림 처리 계층이 필요하며, 분석가, 데이터 과학자, 데이터 엔지니어가 Amazon QuickSight와 같은 도구를 사용하여 분석 및 시각화를 위해 액세스 할 수 있어야 합니다.

데이터가 있는 곳에서 별도의 파이프라인과 작업을 개발하지 않고도 데이터를 분석하고 싶을 때 가장 많이 선택하는 것은 Amazon Athena입니다. Amazon Athena를 사용하면 새로운 언어를 배우거나, 데이터를 추출 및 복제하기 위한 스크립트를 개발하거나, 인프라를 관리할 필요 없이 기존 SQL 지식을 사용해 광범위한 데이터 소스에서 인사이트를 얻을 수 있습니다.

Amazon Athena는 데이터 분석가, 데이터 엔지니어, 데이터 과학자가 온프레미스 또는 클라우드에서 실행되는 데이터베이스에 저장된 데이터와 Amazon S3에 저장된 데이터에 대해 SQL 쿼리를 실행할 수 있는 유연성을 제공하며, Amazon DynamoDBAmazon Redshift를 포함한 25개 이상의 인기 있는 데이터 소스에 대한 커넥터를 지원합니다. Amazon Athena를 사용하면 데이터 이동이 없으며 실행한 쿼리에 대해서만 비용을 지불하면 됩니다.

What’s New

이제 Amazon Athena를 사용해 Amazon MSK와 자체 관리형 Apache Kafka에서 스트리밍 데이터를 쿼리할 수 있습니다. 따라서, 데이터를 Amazon S3에 저장하기 위해 별도의 프로세스를 거칠 필요 없이 Kafka 토픽에 저장된 실시간 데이터에 대해 분석 쿼리를 실행하고 해당 데이터를 다른 Kafka 토픽 및Amazon S3 데이터 레이크의 다른 데이터와 조인할 수 있습니다.

솔루션 개요

이 글에서는 Amazon Athena와 Amazon MSK용 커넥터를 사용하여 실시간 SQL 분석을 시작하는 방법을 알아봅니다. 단계는 다음과 같습니다.

  1. AWS Glue 스키마 레지스트리에 스트리밍 데이터의 스키마 등록.
    AWS Glue 스키마 레지스트리는 JSON 스키마를 이용해 스트리밍 데이터의 유효성을 검사하고 안정적으로 발전시킬 수 있는 AWS Glue의 기능입니다. 또한 데이터를 압축된 형식으로 직렬화할 수 있어 데이터 전송 및 저장 비용을 절감하는 데 도움이 됩니다.
  1. Amazon Athena MSK 커넥터 구성하기.
    Amazon Athena MSK 커넥터는 서버리스 AWS Lambda 애플리케이션으로 실행되는 사전 빌드된 애플리케이션이므로 독립형 데이터 내보내기 프로세스가 필요하지 않습니다.
  1. Kafka 토픽에 대화형 SQL 쿼리를 실행하기 위한 Amazon Athena 콘솔을 사용.
    (역자 주: 이 커넥터를 사용하면 Apache Kafka 토픽을 테이블로, 메시지를 행으로 구성하여 Amazon Athena에서 볼 수 있습니다.)

Amazon Athena MSK 커넥터 시작하기

이 섹션에서는 Kafka 토픽에 SQL 쿼리를 실행하기 위해 Amazon Athena와 함께 작동하도록 Amazon MSK 클러스터를 설정하는 데 필요한 단계를 다룹니다.

사전 준비 사항

이 블로그에서는 프로덕션 애플리케이션으로부터 스트리밍 메시지를 수신하도록 서버리스 또는 프로비저닝된 Amazon MSK 클러스터가 설정되어 있다고 가정합니다. 자세한 내용은 Apache Kafka용 Amazon 관리형 스트리밍 개발자 가이드에서 Amazon MSK 설정하기Amazon MSK 사용 시작하기를 참조하세요.

또한, Amazon Athena MSK 커넥터를 사용하기 전에 Amazon VPC 및 보안 그룹을 설정해야 합니다. 자세한 내용은 데이터 소스 커넥터에 대한 Amazon VPC 만들기를 참조하세요. Amazon MSK Serverless를 사용하면 Amazon VPC 및 보안 그룹이 자동으로 생성되므로 빠르게 시작할 수 있습니다.

AWS Glue Scheme Registry로 Kafka 토픽의 스키마를 정의하기

Kafka 토픽에서 SQL 쿼리를 실행하려면, 먼저 Amazon Athena가 (쿼리 플랜에) 이 메타데이터를 사용하기 위해 토픽의 스키마를 정의해야 합니다. AWS Glue는 스트리밍 데이터 소스를 위한 AWS Glue Schema Registry 기능을 통해 이 작업을 쉽게 수행할 수 있습니다.

스키마 레지스트리를 사용하면 Amazon Athena와 같은 분석 애플리케이션에서 사용할 스트리밍 데이터 스키마를 중앙에서 검색, 제어 및 발전시킬 수 있으며, Apache Kafka와의 편리한 통합을 통해 데이터 스트리밍 애플리케이션에서 스키마를 관리하고 적용할 수 있습니다. 자세한 내용은 AWS Glue Schema RegistryScheme Registry 시작하기를 참조하세요.

이러한 스키마 레지스트리를 구성하면 데이터 생산자가 스키마와 변경 사항을 AWS Glue에 자동 등록할 수 있습니다. 이 기능은 시간이 지남에 따라 데이터의 내용이 변경될 가능성이 있는 사용 사례에 특히 유용합니다. 또한, 다음 JSON 구조와 유사하게 스키마를 수동으로 지정할 수도 있습니다.

{
  "topicName": "orders",
  "message": {
    "dataFormat": "json",
    "fields": [
      {
        "name": "customer_id",
        "mapping": "customer_id",
        "type": "VARCHAR"
      },
      {
        "name": "item_id",
        "mapping": "item_id",
        "type": "INTEGER"
      }
    ]
  }
}

스키마 레지스트리를 설정할 때는, (나중에 보게 되겠지만) SQL 쿼리 내에서 참조할 것이므로 customer_schema와 같이 기억하기 쉬운 이름을 지정해야 합니다. 마지막으로 스키마 레지스트리의 설명 필드에 다음 텍스트를 포함합니다: {AthenaFederationMSK}

스키마 설정에 대한 자세한 내용은 스키마 레지스트리의 스키마 예제를 참조하세요.

(역자 주: 하기와 같이 스키마 생성화면에서 스키마 이름, 레지스트리, 데이터 형식을 선택하고 JSON 스키마 형식을 정의할 수 있습니다.) 

Amazon Athena MSK 커넥터 구성하기

스키마가 AWS Glue에 등록되었으면 다음 단계는 Amazon Athena MSK 커넥터를 설정하는 것입니다. 이 단계에서는 Amazon Athena 콘솔을 사용하는 것이 좋습니다. 관련된 단계에 대한 자세한 배경은 커넥터 배포 및 데이터 소스에 연결하기를 참조하세요.

Amazon Athena에서 페더레이션(federated) 데이터 소스 커넥터는 AWS Lambda에서 실행되며 대상 데이터 소스와 Amazon Athena 간의 통신을 처리하는 애플리케이션입니다. 쿼리가 페더레이션된 소스에서 실행되면, Amazon Athena는 AWS Lambda 함수를 호출하여 해당 소스에 특정한 쿼리 부분을 실행하는 작업을 수행합니다. 페더레이션 쿼리 실행 워크플로에 대해 자세히 알아보려면 Amazon Athena 사용 가이드에서 Amazon Athena 페더레이션 쿼리 사용을 참조하세요.

먼저, Amazon Athena 콘솔에 액세스하고 왼쪽 탐색에서 데이터 원본을 선택한 다음 데이터 원본 생성을 선택합니다.

다음으로는, 사용 가능한 커넥터에서 Amazon MSK를 검색하여 선택하고 다음을 선택합니다.

데이터 원본 세부 정보 섹션에서 데이터 원본 이름에 기억하기 쉽고 향후 SQL 쿼리에서 참조할 수 있는 이름(예: msk)을 지정합니다. 연결 세부 정보 섹션에서 AWS Lambda 함수 생성를 선택합니다.

그러면 추가 구성 속성을 제공할 수 있는 AWS Lambda 콘솔로 이동합니다.

AWS Lambda 애플리케이션 AthenaMSKConnector 구성 화면에서 하기 그림과 같은 커넥터에 대한 애플리케이션 설정을 제공해야 합니다.

우선, 다른 브라우저 탭에서 Amazon MSK 콘솔을 사용하여 Amazon MSK 클러스터로 이동한 다음 속성 탭을 선택합니다. 여기에서 Amazon MSK 클러스터의 Amazon VPC 서브넷과 보안 그룹 ID를 볼 수 있으며, 이 정보는 위 화면의 AthenaMSKConnector 애플리케이션 설정 양식에 있는 SubnetIds 및 SecurityGroupIds 필드에 입력합니다. 클라이언트 정보 보기를 클릭하면 KafkaEndpoint의 값을 찾을 수 있습니다.

이러한 값과 기타 필수 값을 입력한 후 배포를 클릭 합니다.

다음으로, Amazon Athena 콘솔로 돌아와 연결 세부 정보 상자에 방금 만든 AWS Lambda 함수의 이름을 입력한 후 다음을 클릭하고, 검토 및 생성 단계 확인 후 데이터 원본 생성을 클릭합니다.

Amazon Athena를 사용하여 스트리밍 데이터에 대한 쿼리 실행

이제 Amazon Athena MSK 데이터 커넥터가 설정되었으므로 데이터에 대해 SQL 쿼리를 실행할 수 있습니다. 두 가지 사용 사례를 더 자세히 살펴보겠습니다.

사용 사례: 대화형 분석

Amazon MSK 데이터를 집계, 그룹화 또는 필터링하는 쿼리를 실행하려는 경우, Amazon Athena를 사용하여 대화형 쿼리를 실행할 수 있습니다. (이러한 쿼리는 쿼리가 제출된 시점의 Kafka 토픽의 현재 상태에 대해 실행됩니다.)

쿼리를 실행하기 전에 Kafka 토픽 내에서 사용 가능한 스키마와 데이터 유형의 유효성을 검사하는 것이 도움이 될 수 있습니다. 이렇게 하려면 아래와 같이 Amazon Athena에 테이블로 표시되는 Kafka 주제에서 DESCRIBE 명령을 실행합니다. 이 쿼리에서 orders 테이블은 스키마 레지스트리에서 지정한 주제에 해당합니다.

DESCRIBE msk.customer_schema.orders

이제 토픽의 스키마를 알수 있기에 분석 쿼리 개발을 시작할 수 있습니다. 전자 상거래 주문 데이터가 포함된 가상의 Kafka 주제에 대한 샘플 쿼리는 다음과 같습니다:

SELECT customer_id, SUM(order_total)
FROM msk.customer_schema.orders
GROUP BY customer_id

orders 테이블(및 기본 Kafka 토픽)에는 무한한 데이터 스트림이 포함될 수 있으므로, 위의 쿼리는 쿼리를 실행할 때마다 SUM(order_total)에 대해 다른 값을 반환할 가능성이 높습니다.

다른 토픽과 조인해야 하는 데이터가 있는 경우에도 하기와 같이 조회할 수 있습니다.

SELECT t1.order_id, t2.item_id
FROM msk.customer_schema.orders as t1
JOIN msk.customer_schema.items as t2
ON t1.id = t2.id

사용 사례: Amazon S3의 테이블로 스트리밍 데이터 수집하기

페더레이션 쿼리는 데이터 원본에 대해 실행되므로 위와 같은 대화형 쿼리는 데이터의 현재 상태에 대해 결과를 반환합니다.

따라서, 한 가지 고려할 사항은 페더레이션 쿼리를 반복적으로 실행하면 데이터 원본에 추가 부하가 걸릴 수 있다는 것입니다. 동일한 소스 데이터에 대해 여러 쿼리를 수행하려는 경우, Amazon Athena의 CREATE TABLE AS SELECT(CTAS)를 사용하여 SELECT 쿼리의 결과를 Amazon S3의 테이블에 저장할 수 있습니다. 그러면 매번 데이터 원본에 쿼리하지 않고  Amazon S3에 새로 생성한 테이블에서 쿼리를 실행할 수 있습니다.

CREATE TABLE my_kafka_data
WITH (format = 'Parquet',
           write_compression = 'SNAPPY',
           external_location = 's3://your-bucket/orders-data/ (역자 추가)
           )
AS
SELECT order_id, item_id, timestamp
FROM msk.customer_schema.orders

이러한 데이터에 대한 추가적인 다운스트림 분석(예: Amazon QuickSight의 대시보드 구성)을 수행하려는 경우, 주기적으로 테이블에 새 데이터를 추가하여 위의 솔루션을 개선할 수 있습니다. 자세한 내용은 ETL 및 데이터 분석에 CTAS 및 INSERT INTO 사용하기를 참조하세요. 이 접근 방식의 또 다른 장점은 권한이 부여된 사용자만 테이블에 액세스할 수 있도록 AWS Lake Formation으로 구동되는 행, 열, 테이블 수준의 데이터 거버넌스 정책으로 이러한 테이블을 보호할 수 있다는 점입니다.

그 밖의 다른 사례:

Amazon Athena를 사용하면 새로운 언어를 배우거나, 데이터를 추출(및 복제)하는 스크립트를 개발하거나, 인프라를 관리할 필요 없이 기존 SQL 지식을 사용해 광범위한 데이터 소스에서 인사이트를 생성하는 페더레이션 쿼리를 실행할 수 있습니다. Amazon Athena는 데이터로 훨씬 더 많은 일을 할 수 있도록 다른 AWS 서비스, 인기 있는 분석 도구 및 SQL IDE와의 추가 통합을 제공합니다. 예를 들면 다음과 같습니다.

  • Amazon QuickSight와 같은 비즈니스 인텔리전스 애플리케이션에서 데이터 시각화
  • Amazon Athena와 AWS Step Functions의 통합을 통해 이벤트 중심 데이터 처리 워크플로우 설계
  • 여러 데이터 소스를 통합하여 Amazon SageMaker에서 머신 러닝을 위한 풍부한 입력 피쳐를(features) 생성

결론

이 블로그에서는 새로 출시된 Amazon Athena MSK 커넥터에 대해 알아보았습니다. 이 커넥터를 사용하면 Amazon MSK 또는 자체 관리 Apache Kafka에서 실행 중인 Kafka 토픽에 있는 데이터에 대해 대화형 쿼리를 실행할 수 있습니다. 이를 통해 대시보드에 실시간 인사이트를 가져오거나 스트리밍 데이터의 특정 시점 분석을 통해 시간에 민감한 비즈니스 질문에 답할 수 있습니다.

또한, 별도의 Sink 프로세스 없이 주기적으로 새로운 스트리밍 데이터를 Amazon S3로 수집하는 방법도 다루었습니다. 이렇게 하면 기본 Kafka 클러스터에 대한 직접적 쿼리 없이도 데이터의 반복적인 분석을 간소화할 수 있으며, AWS Lake Formation 기반의 액세스 규칙으로 데이터를 보호할 수 있습니다.

데이터 분석 프로젝트가 예정되어 있거나 진행중이라면 Amazon Athena 및 페더레이션 쿼리를 사용해 보시기 바랍니다.

시작하는 데 도움이 필요하면 다음 리소스를 참조하세요.

Kunwoo Park

Kunwoo Park

박건우 솔루션즈 아키텍트는 20년 이상의 검색, 광고, 빅데이터 개발 경험을 바탕으로, AWS 고객의 비즈니스 성과 달성을 위해 고객과 함께 최적의 아키텍처를 구성하는 역할을 수행함으로써 고객이 원하는 비즈니스 목표를 달성할 수 있도록 지원하고 있습니다.