2014-10-11 43 views
3

有沒有方法可以說明碎片的狀態,無論是OPEN,CLOSED還是EXPIRED?我能夠確定這些信息的唯一方法似乎是試圖在碎片上進行操作。如何判斷Kinesis碎片的狀態?

+0

? – az3 2014-10-14 13:41:53

+1

並不重要。我想知道是否有方法通過他們的API獲取這些信息。 – thyme 2014-10-14 14:59:20

回答

6

您可以使用亞馬遜Web服務的Java 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 2014-10-14 14:59:45

+0

哦,對不起,我錯過了那部分。據我所知,你不能直接訪問碎片的狀態(還)。但是有一個技巧:一個封閉的碎片總是有一個定義的「EndingSequenceNumber」。你可以用這種方法破解。 http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/kinesis/model/SequenceNumberRange.html#getEndingSequenceNumber() – az3 2014-10-15 14:48:20