AWS Glue 스트리밍
AWS Glue의 구성 요소인 AWS Glue 스트리밍을 통해 거의 실시간으로 스트리밍 데이터를 효율적으로 처리하여 데이터 모으기, 처리, 기계 학습과 같은 중요한 작업을 수행할 수 있습니다. AWS Glue Streaming은 Apache Spark Streaming 프레임워크를 사용하여 스트리밍 데이터를 대규모로 처리할 수 있는 서버리스 서비스를 제공합니다. AWS Glue는 Apache Spark를 기반으로 서버리스 인프라, 자동 크기 조정, 시각적 작업 개발, 스트리밍 작업을 위한 인스턴트 온 노트북 및 기타 성능 개선과 같은 다양한 최적화를 제공합니다.
스트리밍 사용 사례
다음은 AWS Glue 스트리밍의 일반적인 사용 사례입니다.
실시간에 가까운 데이터 처리: AWS Glue 스트리밍을 통해 조직은 스트리밍 데이터를 거의 실시간으로 처리하여 최신 정보를 기반으로 인사이트를 얻고 시기적절한 결정을 내릴 수 있습니다.
사기 탐지: AWS Glue 스트리밍 데이터의 실시간 분석을 위해 스트리밍을 활용하면 신용 카드 사기, 네트워크 침입 또는 온라인 사기와 같은 사기 행위를 탐지하는 데 유용합니다. 수신 데이터를 지속적으로 처리하고 분석하여 의심스러운 패턴이나 이상 징후를 신속하게 식별할 수 있습니다.
소셜 미디어 분석: AWS Glue 스트리밍을 통해 트윗, 게시물, 댓글 등의 실시간 소셜 미디어 데이터를 처리할 수 있으므로 조직은 추세를 모니터링하고, 감정 분석을 하고, 브랜드 평판을 실시간으로 관리할 수 있습니다.
사물 인터넷(IoT) 분석: AWS Glue 스트리밍은 IoT 디바이스, 센서 및 연결된 기계에서 생성되는 고속 데이터 스트림을 처리하고 분석하는 데 적합합니다. 이는 실시간 모니터링, 이상 탐지, 예측 유지 보수 및 기타 IoT 분석 사용 사례를 지원합니다.
클릭스트림 분석: AWS Glue 스트리밍은 웹 사이트 또는 모바일 애플리케이션의 실시간 클릭스트림 데이터를 처리하고 분석할 수 있습니다. 이를 통해 기업은 사용자 행동에 대한 인사이트를 얻고, 사용자 경험을 개인화하고, 실시간 클릭스트림 데이터를 기반으로 마케팅 캠페인을 최적화할 수 있습니다.
로그 모니터링 및 분석: AWS Glue 스트리밍은 서버, 애플리케이션 또는 네트워크 디바이스의 로그 데이터를 실시간으로 지속적으로 처리하고 분석할 수 있습니다. 이는 이상을 탐지하고, 문제를 해결하고, 시스템 상태와 성능을 모니터링하는 데 도움이 됩니다.
추천 시스템: AWS Glue 스트리밍은 사용자 활동 데이터를 실시간으로 처리하고 추천 모델을 동적으로 업데이트할 수 있습니다. 이를 통해 사용자 행동 및 기본 설정을 기반으로 개인화된 실시간 추천이 가능합니다.
다음은 AWS Glue 스트리밍을 적용할 수 있는 다양한 사용 사례의 몇 가지 예제입니다. AWS 에코시스템 및 관리형 서비스와의 통합으로 클라우드에서 실시간 스트림 처리 및 분석을 위한 편리한 선택이 됩니다.
AWS Glue 스트리밍 사용의 이점은 무엇인가요?
다음은 AWS Glue 스트리밍 사용의 이점입니다.
서버리스: AWS Glue 스트리밍은 서버리스이므로 인프라를 관리할 필요가 없습니다. 이를 통해 운영 오버헤드가 줄어들고 사용자는 인프라 관리보다는 데이터 처리 및 분석 작업에 집중할 수 있습니다.
자동 크기 조정: AWS Glue 스트리밍은 워크로드에 따라 처리 용량을 동적으로 조정하는 자동 크기 조정 기능을 제공합니다. 데이터 볼륨의 변동을 처리하기 위해 자동으로 스케일 아웃 또는 스케일 인하여 최적의 성능과 리소스 활용도를 보장합니다.
시각적 개발: 스트리밍 작업 개발은 복잡할 수 있습니다. AWS Glue 스트리밍은 시각적 저작 도구인 AWS Glue Studio를 제공하여 이러한 문제를 해결합니다. AWS Glue Studio는 스트리밍 워크플로 생성 프로세스를 간소화하고 개발자가 스트리밍 애플리케이션을 시각적으로 설계 및 관리할 수 있도록 하여 학습 곡선을 줄이고 생산성을 높입니다.
비용 효율성: AWS Glue 스트리밍은 서버리스 서비스로서 인프라를 프로비저닝하고 유지 보수할 필요가 없으므로 비용 효율성을 제공합니다. 스트리밍 작업을 실행하는 동안 소비된 리소스를 기준으로 사용자에게 요금이 청구되므로 실제 사용량에 따라 비용을 최적화하고 조정할 수 있습니다.
복잡한 워크로드 처리: AWS Glue 스트리밍은 복잡한 스트리밍 워크로드를 처리하도록 설계되었습니다. 대량의 실시간 데이터를 처리 및 분석하고, 고급 변환을 지원하고, 다른 AWS 서비스와 통합하여 정교한 스트리밍 데이터 파이프라인과 분석 워크플로를 지원할 수 있습니다.
종속 없음: AWS Glue 스트리밍은 유연성을 제공하고 벤더 종속을 방지합니다. 사용자는 AWS Glue 스트리밍을 보다 광범위한 AWS 에코시스템의 일부로 활용하여 다른 AWS 서비스와 원활하게 통합할 수 있습니다. 이를 통해 특정 기술이나 플랫폼에 얽매이지 않고도 기존 데이터 소스, 애플리케이션 및 서비스와 쉽게 통합할 수 있습니다.
AWS Glue 스트리밍은 언제 사용하나요?
스트리밍 사용 사례에는 여러 가지 옵션이 있습니다. 다음 시나리오에서는 AWS Glue 스트리밍을 권장합니다.
배치 처리에 이미 AWS Glue 또는 Spark를 사용하고 있다면 AWS Glue 스트리밍이 이상적인 선택입니다. 새로운 언어나 프레임워크를 배울 필요 없이 스트리밍 작업 구축으로 원활하게 전환할 수 있습니다. AWS Glue 스트리밍은 기존 지식과 인프라를 활용하여 작업 개발 프로세스를 간소화하고 데이터 처리 기능을 실시간 스트리밍 시나리오로 쉽게 확장할 수 있도록 합니다.
배치, 스트리밍, 이벤트 기반 워크로드를 처리하기 위한 통합 서비스나 제품이 필요하다면 AWS Glue 스트리밍이 적합한 솔루션입니다. AWS Glue 스트리밍을 사용하면 데이터 처리 요구 사항을 단일 프레임워크로 통합하여 여러 시스템을 관리하는 복잡성을 없앨 수 있습니다. 이를 통해 다양한 데이터 워크플로를 효율적으로 개발하고 유지 보수하는 동시에 다양한 워크로드 유형에서 일관성과 호환성을 보장할 수 있습니다.
AWS Glue 스트리밍은 매우 큰 스트리밍 데이터 볼륨과 스트림 또는 관계형 데이터베이스 간 조인과 같은 복잡한 변환과 관련된 시나리오에 적합합니다. 대량의 데이터 스트림을 효율적으로 처리하고 분석할 수 있으므로 까다로운 워크로드를 쉽게 처리할 수 있습니다. 고속 데이터 모으기든 복잡한 데이터 조작이든 AWS Glue 스트리밍의 확장성과 고급 처리 기능은 최적의 성능과 정확한 결과를 보장합니다.
스트리밍 작업을 구축하는 데 시각적 접근 방식을 선호하는 경우 AWS Glue는 스트리밍 애플리케이션을 시각적으로 설계하고 관리할 수 있는 AWS Glue Studio를 제공하여 개발 프로세스를 간소화합니다. 이 직관적인 인터페이스를 통해 개발자는 시각적 인터페이스를 사용하여 스트리밍 워크플로를 생성, 구성 및 모니터링할 수 있으므로 학습 곡선을 줄이고 생산성을 높일 수 있습니다.
AWS Glue 스트리밍은 10초 이상의 엄격한 서비스 수준 계약(SLA)이 있는 실시간에 가까운 사용 사례에 탁월한 선택입니다.
Apache Iceberg, Apache Hudi 또는 Delta Lake를 사용하여 트랜잭션 데이터 레이크를 구축하는 경우 AWS Glue 스트리밍은 이러한 오픈 테이블 형식을 기본적으로 지원합니다. 이러한 원활한 통합을 통해 이러한 트랜잭션 데이터 레이크에서 직접 스트리밍 데이터를 처리하여 데이터 일관성, 무결성 및 호환성을 보장할 수 있습니다.
다양한 데이터 대상에 대한 스트리밍 데이터를 모아야 하는 경우: AWS Glue 스트리밍은 Amazon Redshift, Amazon RDS, Amazon Aurora, Oracle, SQL Server 및 기타 대상과 같은 다양한 데이터 대상에 대한 기본 대상을 제공합니다.
지원되는 데이터 원본
AWS Glue 스트리밍에서 지원되는 데이터 소스는 다음과 같습니다.
Amazon Kinesis
Amazon MSK(Managed Streaming for Apache Kafka)
자체 관리형 Apache Kafka
지원되는 데이터 대상
AWS Glue 스트리밍은 다음과 같은 다양한 데이터 대상을 지원합니다.
AWS Glue 데이터 카탈로그에서 지원하는 데이터 대상
Amazon S3
Amazon Redshift
MySQL
PostgreSQL
Oracle
Microsoft SQL Server
Snowflake
JDBC를 사용하여 연결할 수 있는 모든 데이터베이스
Apache Iceberg, Delta 및 Apache Hudi
AWS Glue Marketplace 커넥터
스트리밍 작업에 대한 실시간 모드 활성화
실시간 모드(RTM)는 AWS Glue 6.0에서 사용할 수 있는 Spark Structured Streaming을 위한 새로운 실행 모델입니다. RTM은 엔드 투 엔드 지연 시간을 몇 초 또는 몇 분에서 1초 미만으로 줄입니다. 실시간 모드는 Spark Structured Streaming 작업에만 적용됩니다. 레거시 Spark Streaming(DStreams) 또는 기타 작업 유형에는 적용되지 않습니다.
RTM은 Trigger.RealTime을 사용합니다. 작업은 배치 기간(기본 5분) 내에 지속적으로 실행되며 여러 간격에 걸쳐 데이터를 누적하지 않고 레코드가 도착하는 대로 처리합니다. 이는 forEachBatch/Trigger.ProcessingTime이 각 간격마다 작업을 폴링, 처리, 커밋, 재시작하는 기본 마이크로 배치 모델과 다릅니다.
중요
RTM에는 작업 인수를 통한 명시적 옵트인이 필요합니다. 모든 소스 파티션을 처리할 수 있는 작업 슬롯이 충분하지 않으면 RTM은 할당되지 않은 파티션을 자동으로 드롭합니다. 모든 Kafka 파티션을 처리할 수 있는 충분한 워커를 프로비저닝해야 합니다.
사전 조건
실시간 모드를 활성화하기 전에 작업이 다음 요구 사항을 충족하는지 확인하세요.
-
AWS Glue 버전 6.0
-
작업은 Spark Structured Streaming을 사용해야 합니다. 실시간 모드는 레거시 Spark Streaming(DStreams) 또는 기타 작업 유형에 적용되지 않습니다.
-
작업 유형은 Spark Streaming(
gluestreaming명령)이어야 합니다. -
작업 언어는 Scala(
--job-language scala)여야 합니다. Spark 4.2까지는 PySpark RTM 지원을 사용할 수 없습니다. -
Kafka 소스만 해당됩니다. Amazon Kinesis는 AWS Glue 6.0의 RTM에서 지원되지 않습니다.
-
상태 비저장 작업(select, filter, project, map)만 해당됩니다. 집계, 조인, 중복 제거, 윈도우 연산과 같은 상태 저장 작업은 지원되지 않습니다.
-
출력 모드는 업데이트여야 합니다. 추가 모드는 RTM에서 지원되지 않습니다.
-
오토 스케일링은 실시간 모드와 호환되지 않습니다. RTM 작업에 대해 오토 스케일링을 활성화하지 마세요. 소스 주제의 모든 Kafka 파티션을 처리하기에 충분한 고정된 수의 워커를 구성합니다.
실시간 모드를 사용해야 하는 경우
실시간 모드는 특정 스트리밍 워크로드 클래스를 위해 설계되었습니다. 다음과 같은 경우 실시간 모드를 사용하는 것이 좋습니다.
-
1초 미만의 엔드 투 엔드 지연 시간이 필요하며 마이크로 배치 지연 시간(1~2초 이상)이 사용 사례에 비해 너무 높은 경우
-
파이프라인이 Kafka에서 Kafka 또는 다른 싱크로 레코드를 필터링, 프로젝션, 보강 또는 라우팅하는 것과 같은 상태 비저장 변환을 수행하는 경우
-
예측 가능한 고정된 수의 Kafka 파티션이 있으며 그에 따라 워커를 프로비저닝할 수 있는 경우
-
작업이 Scala로 작성된 경우
다음과 같은 경우 마이크로 배치 모드를 계속 사용합니다.
-
집계, 조인, 중복 제거 또는 윈도우 계산과 같은 상태 저장 작업이 필요한 경우
-
Amazon Kinesis를 소스로 사용하는 경우
-
PySpark 작업을 작성하는 경우
-
오토 스케일링을 사용하여 가변 데이터 볼륨을 처리하는 경우
-
forEachBatch또는 GlueContext 스트리밍 API를 사용하는 경우 -
사용 사례에는 초 단위 지연 시간이 허용되는 경우
실시간 모드 작동 방식
다음에서는 마이크로 배치 모델과 실시간 모드의 차이점을 설명합니다.
- 마이크로 배치 모드
-
각 간격은 작업을 시작하고, 누적된 데이터를 읽고, 데이터를 처리하고, 체크포인트를 커밋하고, 작업를 종료하고, 반복합니다. 최소 지연 시간은 약 1~2초입니다.
- 실시간 모드
-
작업은 한 번 시작되고
batchDurationMs(기본 5분) 동안 실행됩니다. 작업은 레코드가 도착하면 1초 미만의 지연 시간으로 처리합니다. 시한이 되면 작업이 협력적으로 중지됩니다. 드라이버가 체크포인트를 커밋하고 다음 배치가 작업을 다시 시작합니다.
두 모드 모두 동일한 체크포인트 형식과 복구 메커니즘을 사용합니다. 주요 차이점은 작업 수명입니다. 마이크로 배치 모드는 간격마다 작업을 종료했다가 다시 시작합니다. 실시간 모드는 더 긴 배치 기간 내에서 작업을 지속적으로 실행합니다.
중요
모든 소스 파티션을 처리할 수 있는 작업 슬롯이 충분하지 않으면 RTM은 할당되지 않은 파티션을 자동으로 드롭합니다. 모든 파티션을 처리할 수 있는 충분한 워커를 프로비저닝해야 합니다.
실시간 모드를 활성화하려면
--enable-real-time-mode 작업 인수를 true로 설정하여 실시간 모드를 활성화합니다. AWS Glue 콘솔 또는 API를 통해 이 인수를 설정할 수 있습니다.
실시간 모드를 활성화하려면(콘솔)
-
AWS Glue 콘솔
을 열고 스트리밍 작업을 엽니다. -
[작업 세부 정보(Job details)] 탭을 선택합니다.
-
Glue 버전에서 Glue 6.0을 선택합니다. 유형에서 Spark Streaming을 선택합니다.
-
작업 파라미터 섹션으로 스크롤을 내립니다.
-
새 파라미터 추가를 선택합니다.
-
키(Key)에
--enable-real-time-mode를 입력합니다. 값에true을(를) 입력합니다. -
저장을 선택합니다.
참고
선행 대시가 필요합니다. 작업 파라미터는 DefaultArguments의 콘솔 보기입니다.
실시간 모드를 활성화하려면(API)
--enable-real-time-mode 플래그는 작업 정의의 DefaultArguments 맵에 저장됩니다. 작업을 생성하거나 업데이트할 때 이 플래그를 설정할 수 있습니다.
새 작업을 생성하려면(AWS CLI)
다음 명령을 실행합니다.
aws glue create-job \ --name my-rtm-job \ --role arn:aws:iam::123456789012:role/MyGlueRole \ --glue-version 6.0 \ --worker-type G.1X --number-of-workers 4 \ --command '{"Name":"gluestreaming","ScriptLocation":"s3://my-bucket/scripts/rtm-job.scala"}' \ --default-arguments '{ "--enable-real-time-mode": "true", "--job-language": "scala", "--class": "GlueApp", "--TempDir": "s3://my-bucket/tmp/" }' \ --region us-east-2
새 작업을 생성하려면(boto3)
다음 코드를 사용합니다.
import boto3 glue = boto3.client("glue", region_name="us-east-2") glue.create_job( Name="my-rtm-job", Role="arn:aws:iam::123456789012:role/MyGlueRole", GlueVersion="6.0", WorkerType="G.1X", NumberOfWorkers=4, Command={ "Name": "gluestreaming", "ScriptLocation": "s3://my-bucket/scripts/rtm-job.scala", }, DefaultArguments={ "--enable-real-time-mode": "true", "--job-language": "scala", "--class": "GlueApp", "--TempDir": "s3://my-bucket/tmp/", }, )
기존 작업을 업데이트하려면(AWS CLI)
다음 명령을 실행합니다.
aws glue update-job \ --job-name my-existing-job \ --job-update '{ "GlueVersion": "6.0", "DefaultArguments": { "--enable-real-time-mode": "true", "--job-language": "scala" } }'
스트리밍 스크립트 작성
작업 인수는 실시간 모드를 사용하려는 의도를 선언합니다. 스크립트가 트리거를 선택합니다.
다음 Scala 예제는 Trigger.RealTime을 사용하는 스트리밍 쿼리를 보여줍니다.
import org.apache.spark.sql.streaming.Trigger val query = df.writeStream .format("kafka") .outputMode("update") .trigger(Trigger.RealTime(60000L)) // checkpoint interval in milliseconds .start() query.awaitTermination()
Trigger.RealTime은 밀리초 단위의 체크포인트 간격을 사용합니다. 출력 모드 업데이트가 필요합니다. 추가 모드는 OUTPUT_MODE_NOT_SUPPORTED를 발생시킵니다.
플래그가 설정되어 있는 한 하나의 스크립트에서 모드를 혼합할 수 있습니다.
dfA.writeStream.outputMode("update").trigger(Trigger.RealTime(60000L)).start() dfB.writeStream.outputMode("append").trigger(Trigger.ProcessingTime("30 seconds")).start()
플래그가 누락된 경우의 동작
다음에서는 --enable-real-time-mode 플래그가 설정되지 않은 경우 작업이 작동하는 방식을 설명합니다.
-
--enable-real-time-mode플래그 없이 실시간 쿼리를 시작하는 작업은 쿼리 시작 시 실패합니다. 실패 메시지에 인수를 추가하라는 지시가 표시됩니다. -
마이크로 배치 전용 작업은 이 플래그가 없어도 영향을 받지 않습니다.
-
플래그가 설정되었지만 마이크로 배치 쿼리만 사용하는 작업도 영향을 받지 않습니다.
고려 사항 및 제한
실시간 모드를 사용할 때 다음 사항을 고려하세요.
- 파티션 드롭
-
모든 소스 파티션을 처리할 수 있는 작업 슬롯이 충분하지 않으면 할당되지 않은 파티션은 처리되지 않습니다. 모든 Kafka 파티션을 처리할 수 있도록 워커를 프로비저닝하세요.
- 오토 스케일링 없음
-
실시간 모드 작업에 대해 오토 스케일링을 활성화하지 마세요. 오토 스케일링은 RTM과 호환되지 않으며 낮은 지연 시간의 이점을 상쇄하는 지연 시간을 초래합니다. 소스 주제의 Kafka 파티션 수보다 크거나 같은 고정된 수의 워커를 프로비저닝하세요.
- Kafka 전용
-
Amazon Kinesis 소스는 AWS Glue 6.0에서 RTM을 지원하지 않습니다.
- Scala 전용
-
Spark 4.2까지는 PySpark가 RTM에 대해 지원되지 않습니다.
- 상태 비저장 전용
-
집계, 조인, 중복 제거, 윈도우 연산 및
transformWithState는 지원되지 않습니다. - forEachBatch가 호환되지 않음
-
RTM은
forEachBatch모델을 사용하지 않습니다.writeStream과Trigger.RealTime을 직접 사용합니다. - 체크포인트 복구
-
작업을 다시 시작하면 RTM이 마지막 체크포인트에서 복구됩니다. 체크포인트는
batchDurationMs마다 발생합니다. 최악의 경우 재처리 시간은 하나의 배치 기간입니다(최소 한 번 처리 보장 방식).