What is STREAM
DATA가 모이는 흐르는 곳
Stream에 모이는 데이터는 유니크한 Partition Key로 각 Shard에 분산됨.
(Shard수에 의해 분산되는 Shard가 달라짐)
What is Shard
샤드는 스트림에서 고유하게 식별되는 데이터 레코드 시퀀스입니다. 스트림은 하나 이상의 샤드로 구성되며 각 샤드는 고정된 용량 단위를 제공합니다. 각 샤드는 최대 읽기: 5개의 초당 트랜잭션, 최대 총 데이터 읽기 속도: 초당 2MB 및 최대 쓰기: 1,000개의 초당 레코드, 최대 총 데이터 쓰기 속도: 초당 1MB(파티션 키 포함)를 지원할 수 있습니다. 스트림의 데이터 용량은 스트림에 지정하는 샤드 수의 함수입니다. 스트림의 총 용량은 해당 샤드의 용량의 합계입니다.
데이터 속도가 증가하면 스트림에 할당된 샤드 수를 늘리거나 줄일 수 있습니다. 자세한 내용은 스트림 리샤딩 단원을 참조하십시오.
Stream에 모여있는 데이터를 컨슈머(데이터를 사용하는 서버) 전달하는 입구
Stream을 작성할 때 샤드 수를 설정가능(샤드 수가 많을 수록 비용이 비싸짐)
Stream내부에 데이터를 취득하기 위한 샤드가 미리 정해져있음
(Stream에 데이터를 등록한 시점에 그 데이터를 어느 샤드에 취득 가능하는지 구별됨)
What is Partition Key
- 파티션 키는 스트림 내에서 샤드별로 데이터를 그룹화하는 데 사용
- Kinesis Data Streams는 스트림에 속한 데이터 레코드를 여러 샤드로 분리
- 각 데이터 레코드와 연결된 파티션 키를 사용하여 해당 데이터 레코드가 속한 샤드를 확인
- 최대 길이 제한이 256자인 유니코드 문자열,파티션 키를 128비트 정수 값에 매핑하고 샤드의 해시 키 범위를 사용하여 연결된 데이터 레코드를 샤드에 매핑하기 위해 MD5 해시 함수가 사용
데이터 분활 룰
파티션 키: 최대 256바이트 unicode문자열
->Hashing 128 정수로 매핑(해시 키) -> Hashed Integer를 받은 샤드에 데이터가 보내짐
MD5 최대치 16진수: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
이것을 10진수로 변환한 최대치 :340282366920938463463374607431768211455Kinesis 1 shard의 범위는 0~340282366920938463463374607431768211455 해시 키가 분배됨
샤드를 4분활 할 경우
shard1:
shard2:
shard3:
shard4:
0 ~ 85070591730234615865843651857942052863
shard2:
85070591730234615865843651857942052864 ~ 170141183460469231731687303715884105727
shard3:
170141183460469231731687303715884105728 ~ 255211775190703847597530955573826158591
shard4:
255211775190703847597530955573826158592 ~ 340282366920938463463374607431768211455
구체적 예)
1. partition-key-0001 문자열을 해시키로 함
2. Hashing하면 b7681e2243f62f440887b6d38c002537 16진수를 얻음
3. 10진수로 변환하면 243789333289005976465737331408549979447
4. shard1-shar4의 범위를 참고하면 shard3에 해당하기때문에 파티션 키를 partition-key-0001를 지정한 데이터는 shard3에 흘러감참고
Kinesis Client Library
Kinesis Client Library는 결함이 있어도 정상적으로 스트림의 데이터를 소비할 수 있도록 애플리케이션에 컴파일됩니다. Kinesis Client Library는 각 샤드에 대해 해당 샤드를 실행하고 처리하는 레코드 프로세서가 있도록 보장합니다. 또한 라이브러리는 스트림에서 데이터를 읽는 과정을 간소화합니다. Kinesis Client Library는 Amazon DynamoDB 테이블을 사용하여 제어 데이터를 저장하며, 데이터를 처리하는 애플리케이션마다 테이블 하나를 만듭니다.
댓글
댓글 쓰기