샤드 두 개를 병합합니다. - Amazon Kinesis Data Streams

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

샤드 두 개를 병합합니다.

샤드 병합 작업은 지정된 샤드 두 개를 가져와 단일 샤드로 결합합니다. 병합 이후 단일 하위 샤드는 두 개의 상위 샤드가 포함하는 모든 해시 키 값에 대한 데이터를 받습니다.

샤드 인접

두 개의 샤드를 병합하려면 샤드가 인접해야 합니다. 두 개의 샤드에 대한 해시 키 범위의 조합이 간격이 없는 연속적인 집합을 이룰 경우 두 개의 샤드는 인접했다고 간주됩니다. 예를 들어, 두 개의 샤드가 있으며 샤드 하나의 해시 키 범위가 276...381이고 다른 샤드 하나의 해시 키 범위가 382...454라고 가정하면, 이 두 개의 샤드를 해시 키 범위가 276...454인 단일 샤드로 병합할 수 있습니다.

또 다른 예를 들어, 두 개의 샤드가 있으며 샤드 하나의 해시 키 범위가 276...381이고 다른 샤드 하나의 해시 키 범위가 455...560이라고 가정하면, 이 두 개의 샤드 간에는 범위가 382..454인 하나 이상의 샤드가 있으므로 이 두 개의 샤드를 병합할 수 없습니다.

스트림의 모든 OPEN 샤드 세트는 그룹으로 구성되며 항상 해시 키 값의 전체 범위에 걸쳐 있습니다. MD5 CLOSED와 같은 샤드 상태에 대한 자세한 내용은 리샤드 이후의 데이터 라우팅, 데이터 지속성, 샤드 상태를 고려하세요. 섹션을 참조하세요.

병합을 위한 후보인 샤드를 식별하려면 CLOSED 상태의 모든 샤드를 필터링해야 합니다. OPEN 상태, 즉 CLOSED 상태가 아닌 샤드의 종료 시퀀스 번호는 null입니다. 다음을 사용하여 샤드에 대한 종료 시퀀스 번호를 테스트할 수 있습니다.

if( null == shard.getSequenceNumberRange().getEndingSequenceNumber() ) { // Shard is OPEN, so it is a possible candidate to be merged. }

닫힌 샤드를 필터링한 후 각 샤드에 의해 지원되는 가장 높은 해시 키 값을 기준으로 남은 샤드를 정렬합니다. 다음을 사용하여 이 값을 검색할 수 있습니다.

shard.getHashKeyRange().getEndingHashKey();

필터링되고 정렬된 목록에서 두 개의 샤드가 인접한 경우 해당 샤드를 병합할 수 있습니다.

병합 작업에 대한 코드

다음 코드는 두 개의 샤드를 병합합니다. 이 코드에서는 myStreamName이 스트림의 이름을 보유하고 객체 변수 shard1shard2가 병합할 두 인접 샤드를 보유한다고 가정합니다.

병합 작업의 경우 먼저 새 mergeShardsRequest 객체를 인스턴스화합니다. setStreamName 메서드로 스트림 이름을 지정합니다. 그런 다음 setShardToMergesetAdjacentShardToMerge 메서드를 사용하여 병합할 두 개의 샤드를 지정합니다. 마지막으로 Kinesis Data Streams 클라이언트에서 mergeShards 메서드를 직접적으로 호출하여 작업을 수행합니다.

MergeShardsRequest mergeShardsRequest = new MergeShardsRequest(); mergeShardsRequest.setStreamName(myStreamName); mergeShardsRequest.setShardToMerge(shard1.getShardId()); mergeShardsRequest.setAdjacentShardToMerge(shard2.getShardId()); client.mergeShards(mergeShardsRequest);

이 절차 이후 첫 번째 단계는 스트림이 다시 활성화될 때까지 기다리십시오.에 표시됩니다.