AWS Kiness의 섀시 할당 규칙

3810 단어 shardAWSKinesis
나는 Kiness에 데이터를 보낼 때 디스크를 고정시키고 싶다.
어떤 식으로 할당됐는지 알기 어려운데 누군가 그림으로 보여주면 이해가 빠르지 않을까 해서 썼다.

AWS Kinesis


우선 데이터를 보내는 곳입니다.자세한 내용은 다른 것을 보십시오!
램바다, S3, 다이나모DB 등 이후 데이터를 마음대로 처리하세요.

과일즙


섀시는 스트림에서 데이터 로깅을 식별하는 유일한 그룹입니다.흐름은 여러 개의 디스크로 구성되어 있으며, 각 디스크는 용량의 한 단위이다.각 섀시의 읽기 최대 속도는 5transactions per second이며, 데이터 읽기 최대 합계 속도는 2MB per second이며, 쓰기 최대 1000records per second를 지원하며, 데이터의 최대 쓰기 합계 속도는 1MB per second입니다.스트리밍의 데이터 용량은 스트리밍에 지정된 섀시 수에 따라 달라집니다.전체 스트림 용량은 섀시 용량의 합계입니다.
참조: https://docs.aws.amazon.com/ja_jp/streams/latest/dev/key-concepts.html
듣건대
응, 대량의 데이터를 병행 처리하여 보내려면 디스크를 늘려라.
과일즙이 많을수록 돈을 쓸 수 있으니 주의해야 한다.

분할 규칙


본제
Kinessis에서 Kiness에 데이터를 보낸 원래 구성원은 '구역 키' 라는 값을 사용하여 Kiness에 데이터를 던진다.
섹션 키는 디스크를 단위로 흐르는 데이터를 그룹화하는 데 사용됩니다.Streams 서비스에서 흐름에 속하는 데이터 기록을 여러 디스크에 분배할 때, 모든 데이터 기록과 관련된 구역 키를 사용하여 분배자의 디스크를 확정합니다.파티션 키는 최대 256바이트 길이의 유니코드 문자열입니다.MD5 해싱 함수를 사용하여 문서 구성 단위 키를 128비트 정수 값에 매핑하고 관련 데이터 로깅을 섀시에 매핑합니다.구역 키는 데이터를 흐름에 입력하는 프로그램이 지정합니다.
참조: https://docs.aws.amazon.com/ja_jp/streams/latest/dev/key-concepts.html
Kiness 측은 이 존의 열쇠에 따라 어떤 섀시에 할당할지 결정한다.
128비트 정수 값
이 녀석은 십진법인 것 같다.
정수일 뿐이라면 몇 진법인지 판단할 수 없어 고민이다.일반 MD5는 16진수입니다.
그럼, 그 분배의 규칙은.
파티션 키:최대 256바이트의 유니코드 문자열

128bit에 산열되어 비치는 정수 값 (산열 키라고 함)

Hash화된 정수 값(해시 키)이 할당된 섀시로 데이터 전송
라는 느낌을 받았다.
MD5의 최대값은 16진수입니다.FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF그래서 이걸 10진법으로 바꾸면340282366920938463463374607431768211455그러니까
셀 수 없다.
어쨌든 이렇게 128비트의 10진수를 얻었다.
Kiness의 섀시는 1섀시의 경우0~340282366920938463463374607431768211455에 해싱 키가 할당됩니다.
0부터 시작하는 최대치죠.섹션의 열쇠가 오든hash가 녹은 후의 값이 가장 크기 때문340282366920938463463374607431768211455이기 때문에 반드시 디스크로 보낼 것이다.
최대치를 m로 설정하고 균등하게 분할하면 디스크를 2부분으로 나누면 0~m/2, m/2+1~m 두 부분으로 나뉘고, 3부분은 0~m/3, m/3+1~2*m/3, 2*m/3+1~m 세 부분으로 나뉜다.
균등할 필요는 없다고 생각하지만 특별한 이유가 없다면 균등 배분이 좋지 않겠나.
더 구체적으로 말하면 두 개로 나누려면 3022323669 2909 84637474317682455를 반으로 나눌 수 있다
shard1: 0 ~ 170141183460469231731687303715884105727shard2: 170141183460469231731687303715884105728 ~ 340282366920938463463374607431768211455에 지정됩니다.
4개로 균등하게 분할하려면
shard1: 0 ~ 85070591730234615865843651857942052863shard2: 85070591730234615865843651857942052864 ~ 170141183460469231731687303715884105727shard3: 170141183460469231731687303715884105728 ~ 255211775190703847597530955573826158591shard4: 255211775190703847597530955573826158592 ~ 340282366920938463463374607431768211455.
(비트가 큰 계산http://keisan.casio.jp/calculator에 대해 이것을 사용할 수 있도록 허락해 주십시오.)

구체적 예


예를 들어 문자열 partition-key-0001 이 섹션 키라면, 네 개의 섹션에 분배할 디스크에 어느 것을 붙여 넣으십시오.

  • 문자열partition-key-0001을 파티션 키로 사용
  • MD5 해시 b7681e2243f62f440887b6d38c002537의 16진수 값
  • 2의 16진수를 10진수로 설정하면243789333289005976465737331408549979447
  • 3의 결과는 상기 shared1~shared4의 범위에서 shared3에 해당하기 때문에 구역 키를 지정partition-key-0001한 데이터가shared3
  • 에 버려집니다.
    .
    그나저나 제가 지금 소속하고 있는 프로젝트에서 모든 user의shard를 고정시키고 싶어서 userId를 파티의 열쇠로 직접 사용하고 있습니다.
    남의 참고가 됐으면 좋겠어요.
    끝.

    좋은 웹페이지 즐겨찾기