기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
리샤딩 작업 완료
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의 getShardIterator및 getRecords 작업을 사용하거나 API Kinesis 클라이언트 라이브러리를 통해 액세스할 수 있습니다.
참고
데이터 레코드가 스트림에 추가된 시점으로부터 현재 보존 기간까지 데이터 레코드에 액세스할 수 있습니다. 이는 해당 기간 동안 스트림의 샤드가 변경되는지 여부와 관계없이 마찬가지입니다. 스트림의 보존 기간에 대한 자세한 내용은 데이터 보존 기간 변경 단원을 참조하십시오.
리샤딩 프로세스에서 상위 샤드가 OPEN
상태에서 CLOSED
상태로, EXPIRED
상태로 전환됩니다.
-
OPEN: 리샤드 작업 전에는 상위 샤드가
OPEN
상태에 있습니다. 즉, 샤드에 데이터 레코드를 추가할 수도 있고 샤드에서 검색할 수도 있습니다. -
CLOSED: 리샤드 작업 후 상위 샤드는 상태로 전환됩니다.
CLOSED
즉, 데이터 레코드가 더 이상 샤드에 추가되지 않습니다. 이 샤드에 추가된 데이터 레코드는 이제 하위 샤드에 대신 추가됩니다. 그러나 제한된 기간 동안 계속 샤드에서 데이터 레코드를 검색할 수 있습니다. -
EXPIRED: 스트림의 보존 기간이 만료된 후에는 상위 샤드의 모든 데이터 레코드가 만료되어 더 이상 액세스할 수 없습니다. 이때 샤드 자체는
EXPIRED
상태로 전환됩니다. 스트림에 샤드를 열거하기 위한getStreamDescription().getShards
를 호출하면 반환된 목록 샤드에EXPIRED
샤드가 포함되지 않습니다. 스트림의 보존 기간에 대한 자세한 내용은 데이터 보존 기간 변경 단원을 참조하십시오.
리샤딩이 발생하고 스트림이 다시 ACTIVE
상태가 된 후 즉시 하위 샤드에서 데이터를 읽기 시작할 수 있습니다. 하지만 리샤드 이후에 남아 있는 상위 샤드에는 리샤드 이전에 스트림에 추가된 아직 읽지 않은 데이터가 남아 있을 수 있습니다. 상위 샤드에서 모든 데이터를 읽기 전에 하위 샤드에서 데이터를 읽는 경우 데이터 레코드의 시퀀스 번호에 의해 지정된 순서가 아닌 다른 순서로 특정 해시 키에 대한 데이터를 읽을 수 있습니다. 따라서 데이터 순서가 중요하다고 간주하는 경우, 리샤딩 후 다 읽을 때까지 항상 상위 샤드에서 데이터를 계속 읽어야 합니다. 그런 다음 하위 샤드에서 데이터를 읽기 시작해야 합니다. getRecordsResult.getNextShardIterator
가 null
을 반환하면 상위 샤드에서 모든 데이터를 읽었음을 나타냅니다. Kinesis Client Library를 사용하여 데이터를 읽는 경우 리샤드가 발생한 후 데이터를 순서대로 받지 못할 수 있습니다.