본문 바로가기

Cloud AWS

Amazon AWS :: 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 리전에서 작성되었음을 참고하기 바란다.

  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에서 입력했던 Data blob는 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로 분석할 수 있다.

참고

● 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

Arang

Sr. Technical Trainer at GSNeotek