Amazon Web Services 한국 블로그

Amazon Kinesis Firehose – 확장성 높은 데이터 처리 서비스

2년 전 Amazon Kinesis을 소개하였고 이제 Amazon Kinesis Streams이라 부르며 고대역폭의 스트리밍 데이터를 수집, 처리 및 분석할 수 있는 애플리케이션을 만들 수 있습니다. 더 이상 데이터 수집 서버를 만들 필요가 없고 모니터링 및 확장성 및 신뢰성 있는 배포를 걱정할 필요가 없습니다.

Amazon Kinesis Firehose는 AWS에서 스트리밍 데이터를 좀 더 쉽게 처리하기 위해 만들어졌습니다. 간단히 Amazon Simple Storage Service (S3) 버킷으로 옮기거나 Amazon Redshift 테이블로 (1000 KB까지) 스트림 데이터를 기록할 수 있습니다. Firehose는 모니터링, 확장성 및 데이터 관리를 도와 주게 됩니다.

이를 통해 인프라가 아닌 여러분의 애플리케이션에 더 집중할 수 있는 시간을 얻을 수 있습니다.

Firehose 내부 보기
이를 간단하게 하기 위해 Firehose는 자료(raw data)를 따로 해석하거나 처리하지 않습니다. 간단히 데이터를 전달하고 기록하는 일만 합니다. 압축(client-side) 및 암호화(server-side)후에 데이터를 원하는 S3 버킷에 기록하게 됩니다. AWS의 James Hamilton는 다른 말로 “그냥 간단하다!”라고 표현합니다. 버퍼 사이즈 및 버퍼 간격 등을 제어할 수 있습니다.

만약 Firehose로 데이터를 보내기 전에 클라이언트 코드를 통해 개별 논리적 기록을 처리하려면 구분자를 추가할 수 있습니다. 일단 클라우드에 데이터가 있으면, 나중에 저장된 내역을 확인할 수 있습니다.

만약 여러분 데이터가 S3에 저장되어 있으면 여러분은 분석이나 처리하는데 여러 가지 옵션이 있습니다. 예를 들어 AWS Lambda 함수를 통해 버킷에 데이터가 저장되거나 객체로 올때 처리 가능합니다. 또는 Amazon EMR 작업을 통해 버킷의 데이터를 처리할 수 있습니다.

이제 Firehose를 통해 데이터를 Amazon Redshift 클러스터로 보낼 수도 있습니다. Firehose를 통해 S3 객체로 저장이 된 후에 Redshift COPY 명령어를 실행할 수 있습니다. 이 명령어를 통하면 보다 유연하게 다양한 형식으로 데이터를 가져올 수 있습니다.(예: CVS, JSON, AVRO 등) 또한, 특정 선택 컬럼을 따로 저장하거나 다른 형태로 변환하는 것도 가능합니다.

Firehose 관리 콘솔 사용하기
이제 AWS 관리 콘솔, the AWS Command Line Interface (CLI) 및 Firehose API를 사용할 수 있습니다.

Firehose 콘솔에서 스트리밍 전달을 한번 설정해 보겠습니다. 먼저 Create Delivery Stream를 선택합니다. 이름을 정하고 S3 버킷을 선택 (혹은 추가)한 후 버킷에 쓰기가 가능하도록 IAM 역할을 정하면 됩니다.

스트림 전달시 압축이나 지연을 설정할 수 있습니다. 또한 AWS Key Management Service (KMS) 키를 통해 암호화도 가능합니다.

스트림이 만들어졌으면 이제 콘솔에서 볼 수 있습니다.

스트림 게시하기
아래는 특정 데이터를 스트림으로 게시하는 자바 코드입니다.

PutRecordRequest putRecordRequest = new PutRecordRequest(); 
putRecordRequest.setFirehoseName("incoming-stream"); 

String data = "some data" + "\n"; // add \n as a record separator 
Record record = new Record(); 
record.setData(ByteBuffer.wrap(data.getBytes(StandardCharsets.UTF_8))); 

putRecordRequest.setRecord(record); 
firehoseClient.putRecord(putRecordRequest);

CLI를 통해서도 가능합니다.

$ aws firehose put-record --firehose-name incoming-stream --record Data="some data\n"

리눅스에서 구동하는 에이전트 프로그램도 배포하게 됩니다. 이를 통해 로그 파일을 쉽게 Firehose로 전달할 수 있습니다.

Kinesis Firehose 스트림 모니터링
CloudWatch를 통해 콘솔에서 스트림 데이터를 모니터링 할 수 있습니다.

By the Numbers
개별적인 데이터 스트림은 시간당 수 기가 바이트의 다중 데이터를 처리할 수 있습니다. 기본값으로 각 스트림을 초당 2500 호출을 보낼 수 있으며, AWS 계정당 5개까지 스트림을 PutRecord 또는 PutRecordBatch로 보낼 수 있습니다.

이들 기능은 오늘 부터 사용 가능하며, 가격은 데이터 수집 수량에 따라 정해집니다.

— Jeff;

이 글은 Amazon Kinesis Firehose – Simple & Highly Scalable Data Ingestion의 한국어 번역이며, re:Invent 2015의 신규 서비스 소식입니다.