WiseN

아마존 Kinesis 활용

Sep 01,2015   |   AWS

작성자_GS Neotek

페이스북 공유하기 트위터 공유하기
Blog thumbnail

다루는 내용


· 아마존 Kinesis 이해하기
· 아마존 Kinesis 콘솔에서 생성하기
· 아마존 Kinesis CLI로 사용하기
· 아마존 Kinesis Application 개발하기


 

 




아마존 Kinesis 이해하기






 


  • 아키텍트






 

Kinesis는 대량의 분산된 데이터 스트림을 실시간으로 처리하는 서비스이다. 로그 및 이벤트 데이터를 실시간으로 수집하여 분석하거나, 애플리케이션 및 서비스에서 생성되는 데이터를 수집하여 알림 할 수 있으며, ioT에서 생성되는 방대한 양의 데이터를 실시간으로 수집하여 활용 할 수 있다.

 

주요 개념


 

∙ 샤드 (Shard) : 스트림의 기본 처리 단위. 1shard = (read 2MB/s, write 1MB/s), (read 5req/s, write 1000req/s)
number_of_shards = max(incoming_write_bandwidth_in_KB/1000,outgoing_read_bandwidth_in_KB/2000)
∙ 레코드 (Record) : 스트림에 저장되는 데이터의 단위. (시퀀스 번호, 파티션 키, 데이터 Blob)
∙ 시퀀스 번호 (Sequence number) : 각 레코드에 대한 고유 식별자. 레코드 입력시 Kinesis에서 할당.
∙ 파티션 키 (Partition key) : 레코드를 여러 샤드에 분산 입력하기 위해 사용하는 키. producer에서 관리 해주어야 함.
∙ 데이터 Blob (Data blob) : 입력할 실제 데이터. 최대 50KB.
∙ 생성자 (Producer) : Kinesis에 레코드를 입력하는 것. (Web Server, Mobile 등)
∙ 소비자 (Consumer) : Kinesis에서 레코드를 가져와 처리하는 것. Amazon Kinesis Application 으로도 부른다.


 

 




아마존 Kinesis 콘솔에서 생성하기






 

이 문서는 Oregon 리전에서 작성되었음을 참고하기 바란다.

 

1. 콘솔에서 Kinesis 클릭
2. Create Stream 클릭

∙ Stream Name : kinesis-lab
∙ Number of Shards : 2


 



 

∙ Create 클릭


 

 




아마존 Kinesis CLI로 사용하기






 

아마존 Linux AMI로 생성된 EC2 인스턴스를 준비한다.

 

1. 인스턴스에 SSH 접속
2. 환경 설정

 



 




 


  • 스트림 생성




CLI에서 스트림을 생성할 수 있다. 콘솔에서 생성한 스트림을 먼저 삭제한다.


 

1. 생성 및 확인

 



 

ACTIVE 상태가 되면 샤드에 대한 상세 내용을 보여 준다.


 



 




 


  • 레코드 입력 (producer)




1. 레코드 입력

 



 

Producer 부분이다. partition-key는 producer에서 임의로 사용하며(동일한 partition-key를 사용하면 분산 shard를 사용할 수 없다.), SequenceNumber는 스트림에서 자동 생성한다.


 




 


  • 레코드 가져오기 (consumer)




1. shard iterator 구하기

 



 

shard iterator는 레코드를 읽을 위치를 나타낸다. shard iterator는 300초 동안 유효하다.


2. 레코드 읽기

획득한 shard iterator 값으로 get-records를 실행한다.
aws kinesis get-records –shard-iterator XXXXXXXXXXXXXXXX


 



 

producer에서 입력했ata 던 Dblob는 Base64로 인코딩되어 있으므로 디코딩이 필요하다. 실제 입력된 데이터가 많은 경우 결과를 다 보여 주지는 않는다. NextShardIterator으로 다음 데이터셋을 가져올 수 있다.


 



 

더 이상 데이터가 없는 경우 위와 같은 결과를 응답한다.


 

 




아마존 Kinesis Application 개발하기






 

지금까지 실습한 내용으로 Kinesis의 개념은 이해하였으나 실제 사용하기엔 부족하다. 예제 Application으로 어떻게 활용하는지 알아 본다.

 

1. SDK 다운로드

http://sdk-for-java.amazonwebservices.com/latest/aws-java-sdk.zip


 



 

· lib : aws java sdk 라이브러리 파일이 있다.
· third-party : 예제 소스에서 사용하는 java 라이브러리 파일들이 있다.
· samples : kinesis 예제 소스가 있다.


2. IDE (eclipse 실행)

∙ 소스 임포트 : 예제 소스를 eclipse로 가져온다.


 



 

∙ 라이브러리 추가
Add External JARs로 라이브러리를 추가한다.


 



 

∙ kinesis library는 https://github.com/awslabs/amazon-kinesis-client 소스를 컴파일 하거나,
http://central.maven.org/maven2/com/amazonaws/amazon-kinesis-client/1.2.1/amazon-kinesis-client-1.2.1.jar 를 다운로드 하면된다.


3. Producer 수정 (AmazonKinesisRecordProducerSample.java)

∙ Credential 정의
해당 소스는 인스턴스의 /root/.aws/credentials 파일을 참조하므로 생성해둔다.


 



 

∙ 리전 정의
해당 소스는 리전을 정의하지 않는다. (기본 리전, us-east-1을 사용한다.)


 





 

∙ 데이터 입력


 



 

적당히 수정해서 사용하자.


4. Consumer 수정 (AmazonKinesisApplicationSample.java)

∙ 스트림명 수정


 



 

∙ 리전 정의


 



 

5. 소스 컴파일 및 복사

컴파일한 class 파일과 참조할 라이브러리 파일을 EC2 인스턴스로 복사한다.


 



 

6. 실행

∙ Producer
java -cp .:./lib/* AmazonKinesisRecordProducerSample
∙ Consumer
java -cp .:./lib/* AmazonKinesisApplicationSample


7. 결과

Producer에서 다량을 데이터를 생성하여 kinesis 스트림으로 입력하고, Consumer에서 kinesis의 스트림을 읽어서 화면에 뿌려준다.


 



 

Consumer에서 읽은 data를 DynamoDB에 저장하거나, EMR로 분석할 수 있다.


 

 




참고