【问题标题】:How do I tell the status of a Kinesis shard?如何判断 Kinesis 分片的状态?
【发布时间】:2014-10-11 18:45:57
【问题描述】:

有没有办法判断分片的状态是打开、关闭还是过期?我能够确定此信息的唯一方法似乎是尝试对分片进行操作。

【问题讨论】:

  • 您使用哪种编程语言?
  • 没关系。我想知道是否有办法通过他们的 API 获取这些信息。

标签: amazon-web-services amazon-kinesis


【解决方案1】:

您可以使用 Amazon Web Services 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();
        }
    }
}

-

【讨论】:

  • 对不起,这是流状态而不是分片状态。
  • 哦,抱歉,我错过了那部分。据我所知,您无法直接访问分片的状态(目前)。但是有一个技巧:一个封闭的分片总是定义了一个“EndingSequenceNumber”。你可以这样破解。 docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多