Amazon AWS :: Kinesis 활용
국내 전문 CDN 사업자인 GS네오텍은 2015년에 Amazon Web Service의 AWS Premier Consulting 파트너로서 WiseN 이라는 서비스 브랜드로 클라우드 사업을 함께 하고 있습니다.
Amazon KINESIS 활용
다루는 내용
- 아마존 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 리전에서 작성되었음을 참고하기 바란다.
- 콘솔에서 Kinesis 클릭
- Create Stream 클릭
∙ Stream Name : kinesis-lab
∙ Number of Shards : 2
∙ Create 클릭
아마존 Kinesis CLI로 사용하기
아마존 Linux AMI로 생성된 EC2 인스턴스를 준비한다.
- 인스턴스에 SSH 접속
- 환경 설정
스트림 생성
CLI에서 스트림을 생성할 수 있다. 콘솔에서 생성한 스트림을 먼저 삭제한다.
- 생성 및 확인
ACTIVE 상태가 되면 샤드에 대한 상세 내용을 보여 준다.
레코드 입력 (producer)
- 레코드 입력
Producer 부분이다. partition-key는 producer에서 임의로 사용하며(동일한 partition-key를 사용하면 분산 shard를 사용할 수 없다.), SequenceNumber는 스트림에서 자동 생성한다.
레코드 가져오기 (consumer)
- shard iterator 구하기
shard iterator는 레코드를 읽을 위치를 나타낸다. shard iterator는 300초 동안 유효하다. - 레코드 읽기
획득한 shard iterator 값으로 get-records를 실행한다.
aws kinesis get-records –shard-iterator XXXXXXXXXXXXXXXX
producer에서 입력했던 Data blob는 Base64로 인코딩되어 있으므로 디코딩이 필요하다. 실제 입력된 데이터가 많은 경우 결과를 다 보여 주지는 않는다. NextShardIterator으로 다음 데이터셋을 가져올 수 있다.
더 이상 데이터가 없는 경우 위와 같은 결과를 응답한다.
아마존 Kinesis Application 개발하기
지금까지 실습한 내용으로 Kinesis의 개념은 이해하였으나 실제 사용하기엔 부족하다. 예제 Application으로 어떻게 활용하는지 알아 본다.
- SDK 다운로드http://sdk-for-java.amazonwebservices.com/latest/aws-java-sdk.zip· lib : aws java sdk 라이브러리 파일이 있다.· third-party : 예제 소스에서 사용하는 java 라이브러리 파일들이 있다.· samples : kinesis 예제 소스가 있다.
- 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 를 다운로드 하면된다. - Producer 수정 (AmazonKinesisRecordProducerSample.java)
∙ Credential 정의
해당 소스는 인스턴스의 /root/.aws/credentials 파일을 참조하므로 생성해둔다.
∙ 리전 정의
해당 소스는 리전을 정의하지 않는다. (기본 리전, us-east-1을 사용한다.)
∙ 데이터 입력
적당히 수정해서 사용하자. - Consumer 수정 (AmazonKinesisApplicationSample.java)
∙ 스트림명 수정
∙ 리전 정의 - 소스 컴파일 및 복사
컴파일한 class 파일과 참조할 라이브러리 파일을 EC2 인스턴스로 복사한다. - 실행
∙ Producer
java -cp .:./lib/* AmazonKinesisRecordProducerSample
∙ Consumer
java -cp .:./lib/* AmazonKinesisApplicationSample - 결과
Producer에서 다량을 데이터를 생성하여 kinesis 스트림으로 입력하고, Consumer에서 kinesis의 스트림을 읽어서 화면에 뿌려준다.
Consumer에서 읽은 data를 DynamoDB에 저장하거나, EMR로 분석할 수 있다.
참고
● Tutorial : http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-sample-application.html
웹 서버의 log를 분석하여 레퍼러 정보를 도식화하는 것을 가정한 예제이다. Producer에서 레퍼러를 랜덤하게 생성하고, Consumer에서 읽은 데이터를 그래프로 표현하는 예제를 CloudFormation으로 제공하므로 쉽게 테스트 해볼 수 있다.
● Kinesis : http://docs.aws.amazon.com/kinesis/latest/dev/introduction.html
'Cloud AWS' 카테고리의 다른 글
Amazon AWS :: CloudFormation으로 아마존 VPC 구성 (0) | 2015.11.14 |
---|---|
Amazon AWS :: CloudFormation으로 웹 어플리케이션실행및 관리 (0) | 2015.11.14 |
Amazon AWS :: IAM role 활용 (0) | 2015.11.14 |
Amazon AWS :: EndPoint 이해 (0) | 2015.11.14 |
Amazon AWS :: CodeCommit 이해 (0) | 2015.11.14 |