기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
리샤딩 작업 완료
Amazon Kinesis Data Streams의 리샤딩 절차 이후 일반 레코드 처리를 재개하기 전에 다른 절차 및 고려 사항이 필요합니다. 다음 단원에서는 이에 대해 설명합니다.
스트림이 다시 활성 상태가 될 때까지 대기
splitShard
또는 mergeShards
의 리샤딩 작업을 호출한 후 스트림이 다시 활성 상태가 될 때까지 기다려야 합니다. 사용할 코드는 스트림 생성 후 스트림이 활성화될 때까지 대기할 경우와 동일합니다. 코드는 다음과 같습니다.
DescribeStreamRequest describeStreamRequest = new DescribeStreamRequest(); describeStreamRequest.setStreamName( myStreamName ); long startTime = System.currentTimeMillis(); long endTime = startTime + ( 10 * 60 * 1000 ); while ( System.currentTimeMillis() < endTime ) { try { Thread.sleep(20 * 1000); } catch ( Exception e ) {} try { DescribeStreamResult describeStreamResponse = client.describeStream( describeStreamRequest ); String streamStatus = describeStreamResponse.getStreamDescription().getStreamStatus(); if ( streamStatus.equals( "ACTIVE" ) ) { break; } // // sleep for one second // try { Thread.sleep( 1000 ); } catch ( Exception e ) {} } catch ( ResourceNotFoundException e ) {} } if ( System.currentTimeMillis() >= endTime ) { throw new RuntimeException( "Stream " + myStreamName + " never went active" ); }
리샤딩 후 데이터 라우팅, 데이터 지속성 및 샤드 상태 고려
Kinesis Data Streams는 실시간 데이터 스트리밍 서비스입니다. 애플리케이션에서는 데이터가 스트림의 샤드를 통해 지속적으로 흐르고 있다고 가정해야 합니다. 리샤딩하면 상위 샤드로 이동하는 데이터 레코드가 데이터 레코드 파티션 키가 매핑되는 해시 키 값에 따라 하위 샤드로 이동하도록 다시 라우팅됩니다. 그러나 리샤딩 전에 상위 샤드에 있는 데이터 레코드는 해당 샤드에 유지됩니다. 리샤딩이 발생할 때 상위 샤드가 사라지지 않습니다. 리샤딩 전에 포함하는 데이터와 함께 유지됩니다. 상위 샤드의 데이터 레코드는 Kinesis Data Streams API의 getShardIterator 및 getRecords 작업을 사용하거나 Kinesis Client Library를 통해 액세스할 수 있습니다.
참고
데이터 레코드가 스트림에 추가된 시점으로부터 현재 보존 기간까지 데이터 레코드에 액세스할 수 있습니다. 이는 해당 기간 동안 스트림의 샤드가 변경되는지 여부와 관계없이 마찬가지입니다. 스트림의 보존 기간에 대한 자세한 내용은 데이터 보존 기간 변경 단원을 참조하십시오.
리샤딩 프로세스에서 상위 샤드가 OPEN
상태에서 CLOSED
상태로, EXPIRED
상태로 전환됩니다.
-
OPEN: 리샤딩 작업 전 상위 샤드는
OPEN
상태입니다. 즉, 데이터 레코드를 샤드에 추가하고 샤드에서 검색할 수 있습니다. -
CLOSED: 리샤딩 작업 후 상위 샤드가
CLOSED
상태로 전환됩니다. 즉, 데이터 레코드가 더 이상 샤드에 추가되지 않습니다. 이 샤드에 추가된 데이터 레코드는 이제 하위 샤드에 대신 추가됩니다. 그러나 제한된 기간 동안 계속 샤드에서 데이터 레코드를 검색할 수 있습니다. -
EXPIRED: 스트림의 보존 기간이 만료된 후 상위 샤드에 있는 모든 데이터 레코드가 만료되며 더 이상 액세스할 수 없습니다. 이때 샤드 자체는
EXPIRED
상태로 전환됩니다. 스트림에 샤드를 열거하기 위한getStreamDescription().getShards
를 호출하면 반환된 목록 샤드에EXPIRED
샤드가 포함되지 않습니다. 스트림의 보존 기간에 대한 자세한 내용은 데이터 보존 기간 변경 단원을 참조하십시오.
리샤딩이 발생하고 스트림이 다시 ACTIVE
상태가 된 후 즉시 하위 샤드에서 데이터를 읽기 시작할 수 있습니다. 그러나 리샤딩 후 남아 있는 상위 샤드는 리샤딩 전에 스트림에 추가되어 아직 읽지 않은 데이터를 계속 포함할 수 있습니다. 상위 샤드에서 모든 데이터를 읽기 전에 하위 샤드에서 데이터를 읽는 경우 데이터 레코드의 시퀀스 번호에 의해 지정된 순서가 아닌 다른 순서로 특정 해시 키에 대한 데이터를 읽을 수 있습니다. 따라서 데이터 순서가 중요하다고 간주하는 경우, 리샤딩 후 다 읽을 때까지 항상 상위 샤드에서 데이터를 계속 읽어야 합니다. 그런 다음 하위 샤드에서 데이터를 읽기 시작해야 합니다. getRecordsResult.getNextShardIterator
가 null
을 반환하면 상위 샤드에서 모든 데이터를 읽었음을 나타냅니다. Kinesis Client Library를 사용하여 데이터를 읽는 경우 리샤딩이 발생한 후 순서대로 데이터를 수신하지 못할 수 있습니다.