기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
두 개의 샤드 병합
샤드 병합 작업은 지정된 샤드 두 개를 가져와 단일 샤드로 결합합니다. 병합 이후 단일 하위 샤드는 두 개의 상위 샤드가 포함하는 모든 해시 키 값에 대한 데이터를 받습니다.
샤드 인접
두 개의 샤드를 병합하려면 샤드가 인접해야 합니다. 두 개의 샤드에 대한 해시 키 범위의 조합이 간격이 없는 연속적인 집합을 이룰 경우 두 개의 샤드는 인접했다고 간주됩니다. 예를 들어, 두 개의 샤드가 있으며 샤드 하나의 해시 키 범위가 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
이 스트림의 이름을 보유하고 객체 변수 shard1
및 shard2
가 병합할 두 인접 샤드를 보유한다고 가정합니다.
병합 작업의 경우 먼저 새 mergeShardsRequest
객체를 인스턴스화합니다. setStreamName
메서드로 스트림 이름을 지정합니다. 그런 다음 setShardToMerge
및 setAdjacentShardToMerge
메서드를 사용하여 병합할 두 개의 샤드를 지정합니다. 마지막으로 Kinesis Data Streams 클라이언트에서 mergeShards
메서드를 직접적으로 호출하여 작업을 수행합니다.
MergeShardsRequest mergeShardsRequest = new MergeShardsRequest(); mergeShardsRequest.setStreamName(myStreamName); mergeShardsRequest.setShardToMerge(shard1.getShardId()); mergeShardsRequest.setAdjacentShardToMerge(shard2.getShardId()); client.mergeShards(mergeShardsRequest);
이 절차 이후 첫 번째 단계는 스트림이 다시 활성 상태가 될 때까지 대기에 표시됩니다.