【问题标题】:Receiving TypeError on ShardIterator when Getting Records from Kinesis从 Kinesis 获取记录时在 ShardIterator 上收到 TypeError
【发布时间】:2014-06-13 14:44:28
【问题描述】:

我有以下 Python 块来获取已放置到 Kinesis 流中的记录,然后将记录放入 S3 存储桶中。此流只有一个分片。

# Fetching the shard iterators from the Kinesis stream
shard_iterators = []
if response and 'StreamDescription' in response:
    for shard_id in response['StreamDescription']['Shards']:
        shard_id = shard_id['ShardId']
        shard_iterator = kinesis_connection.get_shard_iterator(stream_name, shard_id, 'LATEST')
        shard_iterators.append(shard_iterator['ShardIterator'])

# Iterating over the Kinesis stream and pushing data to S3
bucket = s3_connection.get_bucket(bucket_name)
k = Key(bucket)

for shard_iterator in shard_iterators:
    while 1:
        response = kinesis_connection.get_records(shard_iterator)
        shard_iterator = response['NextShardIterator']
        if len(response['Records'])> 0:
            for res in response['Records']:
                k.key = datetime.datetime.now().strftime('%Y/%m/%d/') + res['SequenceNumber']
                k.set_contents_from_string(res['Data'])

数据最初从流中提取并推送到 S3,但在某些时候,我在 response = kinesis_connection.get_records(shard_iterator) 线上收到了 TypeError: expected string or buffer。分片上还有更多记录可供我提取。以前有没有人遇到过这个问题和/或有没有人对我应该尝试解决的问题有什么想法?

【问题讨论】:

    标签: amazon-kinesis


    【解决方案1】:

    该错误似乎是由 json 解码非字符串引发的。例如None,或整数。

    import json
    json.loads(None)
    ...
    File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
       obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    TypeError: expected string or buffer
    

    这可能发生在这里:https://github.com/boto/boto/blob/develop/boto/kinesis/layer1.py#L705

    这意味着返回的响应正文是None

    可能是由于您的 shard_iterator 到期。分片迭代器仅持续 5 分钟,因此如果您需要很长时间来处理当前批次的记录,或者以其他方式停滞,可能就是这样。 见:http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html

    另一种可能性是它是一个间歇性的身份验证/连接错误,我以前见过,它可能会产生虚假异常,这可能会导致相同的 boto 代码路径?

    不过,如果您能提供更多的堆栈跟踪和您看到的任何日志消息,那将会很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      相关资源
      最近更新 更多