2014-10-11 3 views
3

파산 여부를 알 수있는 방법이 있습니까? OPEN, CLOSED 또는 EXPARED 중 어떤 것이 있습니까? 이 정보를 확인할 수있는 유일한 방법은 샤드에서 작업을 시도하는 것 같습니다.키네시스 샤드의 상태를 어떻게 알 수 있습니까?

+0

당신이 사용하는 프로그래밍 언어? – az3

+1

정말 중요하지 않습니다. API를 통해이 정보를 얻을 수있는 방법이 있는지 궁금합니다. – thyme

답변

6

당신은 아마존 웹 서비스 자바 SDK를 사용할 수 있습니다 https://github.com/aws/aws-sdk-java 자원에 액세스하기위한 유용한 방법이 많이 있습니다

.

편집 : 죄송합니다. 질문에 잘못 이해했습니다. 샤드의 상태는 (아직) 직접 접근 할 수 없습니다. 그러나 트릭이 있습니다 : 닫힌 샤드에는 항상 "끝 시퀀스 번호"가 정의되어 있습니다. 이 방법으로 해킹 할 수 있습니다.

Javadoc의 발췌문;

공개 문자열 getEndingSequenceNumber()

범위의 종료 시퀀스 번호. OPEN 상태에있는 샤드는 종료 시퀀스 번호가 null입니다.

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/kinesis/model/SequenceNumberRange.html#getEndingSequenceNumber()

import com.amazonaws.auth.BasicAWSCredentials; 
import com.amazonaws.services.kinesis.AmazonKinesis; 
import com.amazonaws.services.kinesis.AmazonKinesisClient; 
import com.amazonaws.services.kinesis.model.DescribeStreamRequest; 
import com.amazonaws.services.kinesis.model.DescribeStreamResult; 
import com.amazonaws.services.kinesis.model.ListStreamsResult; 

public class KinesisSandbox { 

    public static void main(String[] args) { 
     try { 
      String amazonKey = "x"; 
      String amazonSecret = "y"; 
      AmazonKinesis client = new AmazonKinesisClient(new BasicAWSCredentials(amazonKey, amazonSecret)); 

      ListStreamsResult listStreamsResult = client.listStreams(); 
      System.out.println("\nlistStreamsResult: " + listStreamsResult); 

      String streamName = listStreamsResult.getStreamNames().get(0); 

      DescribeStreamRequest describeStreamRequest = new DescribeStreamRequest(); 
      describeStreamRequest.setStreamName(streamName); 
      DescribeStreamResult describeStreamResult = client.describeStream(describeStreamRequest); 
      System.out.println("\n describeStreamResult.getStreamDescription().getStreamStatus(): " 
        + describeStreamResult.getStreamDescription().getStreamStatus()); 
       // System.out.println("\ndescribeStreamResult: " + describeStreamResult); 

      List<Shard> shards = describeStreamResult.getStreamDescription().getShards(); 
      for (int i = 0; i < shards.size(); i++) { 
       Shard shard = shards.get(i); 
       if (shard.getSequenceNumberRange().getEndingSequenceNumber() == null) { 
        System.out.println("shard(" + i + "): " + shard.getShardId() + " is OPEN."); 
       } else { 
        System.out.println("shard(" + i + "): " + shard.getShardId() + " is CLOSED."); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

-

+0

죄송합니다.이 스트림 상태는 샤드 상태가 아닙니다. – thyme

+0

오, 죄송합니다. 나는 그 부분을 놓쳤습니다. 내가 아는 한, 당신은 샤드의 상태에 직접적으로 (아직) 접근 할 수 없습니다. 하지만 트릭이 있습니다 : 닫힌 샤드에는 항상 "EndingSequenceNumber"가 정의되어 있습니다. 이 방법으로 해킹 할 수 있습니다. http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/kinesis/model/SequenceNumberRange.html#getEndingSequenceNumber() – az3

관련 문제