본문 바로가기
CSP (Cloud Service Provider)/AWS

AWS - Kinesis 란 무엇인가! ?

by BTC_돼지국밥 2022. 4. 21.

안녕하세요~

Btc_돼지국밥입니다.

오늘의 주제는 AWS Kinesis !!입니다. 너무 즐거운 주제죠? ㅎㅎ

시작할게요!!

Kinesis는 실시간으로 데이터 스트림을 수집, 처리, 분석해주는 서비스이다. 샤드의 수를 조절하여 스트림을 얼마나 받을지 조절할 수 있습니다!

Amazon Kinesis Data Stream은 완전 관리형이라서 infra 관리를 하지않아도 되기 때문에 신경 써야 할 부분이 거의 없습니다!

Kinesis data stream은 여러 곳에서 데이터를 받아 스트림에 보관하고, 고객에게 해당 데이터를 전달합니다.

스트림은 한 개 이상의 샤드로 구성되어 있는데 데이터는 PartitionKey로 샤드를 특정해 보관합니다.
샤드는 Kinesis Stream의 용도에 맞게 랜덤 하게 분배하거나 특정 샤드에 보내도록 파티션키를 신경 써야 합니다!!

 

consumer는 Kinesis Client Library 를 이용하거나 Data Analytics, Data Firehose 등등 aws서비스를 추가적으로 이용할 수 있습니다.

 

키네시스의 큰그림입니다!

 핵심인 Record를 더 자세히 보면 이런 값을 포함합니다.

  • Sequence Number: 샤드 내에서 순서를 보장하기 위한 번호
  • Partition Key: 최대 256Byte 문자열로 최종적으로 MD5 해시로 샤드에 매핑
  • Data BLOB (최대 1MB)

 

put , get  Record

Kinesis stream에 data 넣을때 필요한 파라미터는 stream-name, data, partition-key 입니다.

# aws kinesis put-record help
SYNOPSIS
  put-record
  --stream-name <value>
  --data <value>
  --partition-key <value>
  [--sequence-number-for-ordering <value>]

데이터를 이런식으로 추가하시면 샤드아이디 와 시퀀스Number를 반환합니다.

 

Kiensis stream에서 데이터를 꺼내올 때는 shard iterator가 꼭 필요합니다.

 

shard iterator를 받아오기 위해 필요한 파라미터를 보면 stream-name, shard-id와  어떤 기준의 iterator를 받아올지 shard-iterator-type을 같이 넘깁니다.

# aws kinesis get-shard-iterator help
SYNOPSIS
  get-shard-iterator
  --stream-name <value>
  --shard-id <value>
  --shard-iterator-type <value>
  [--starting-sequence-number <value>]

 

이렇게 shard-iterator를 사용해서 실제 데이터를 조회할 수 있습니다.

# aws kinesis get-records help
SYNOPSIS
  get-records
  --shard-iterator <value>

 

전송속도

-읽기: 6 TPS, 2 MB/초

-쓰기: 1200 TPS, 1MB/초 

결과적으로 필요한 성능에 따라 샤드 수를 결정해야 한다. 왜냐하면 샤드 수가 늘어날 수록 성능이 좋아지기 때문입니다. kinesis stream 생성 계산식 입니다. 참고해주세요

number_of_shards = max(incoming_write_bandwidth_in_KiB/1024, outgoing_read_bandwidth_in_KiB/2048)

 

고가용성

Record는 PartitionKey에 의해 샤드에 저장됩니다. 샤드는 3군데의 AZ 존에 보관되어 고가용성을 보장한다.

 

긴글 읽어주셔서 감사합니다~

'CSP (Cloud Service Provider) > AWS' 카테고리의 다른 글

AWS CloudWatch Agent 설치 방법  (0) 2022.04.23
AMI와 Snapshot 비교  (0) 2022.04.22
[AWS] VPC - 퍼블릭 서브넷 구성  (0) 2022.04.20
[AWS] VPC - 리소스  (0) 2022.04.14
[AWS] VPN & Direct Connect 개념  (0) 2022.04.13

댓글