使用boto3 Kinesis分页器ListStreams未返回NextToken问题求助
Kinesis流分页查询中未找到NextToken的问题
问题描述
我正按照Kinesis的ListStreams文档列出Kinesis流,目前拥有300多个Kinesis流,尝试使用paginator = client.get_paginator('list_streams')来获取流名称。
我的代码如下:
import boto3 session = boto3.Session(profile_name='', region_name='us-east-1') client = session.client('kinesis') paginator = client.get_paginator('list_streams') response_iterator = paginator.paginate( PaginationConfig={ 'MaxItems': 10, 'PageSize': 5, } ) for page in response_iterator: print(page)
但在返回结果中找不到NextToken,返回示例如下:
{'StreamNames': [streamnames], 'HasMoreStreams': True, 'ResponseMetadata': {'RequestId': 'e7e044f5-2ebd-45bd-bc07-4c724269adef', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '', 'x-amz-id-2': '', 'date': 'Thu, 10 Nov 2022 14:10:15 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '1705'}, 'RetryAttempts': 0}} {'StreamNames': [streamnames], 'HasMoreStreams': True, 'ResponseMetadata': {'RequestId': 'd9a32e03-2ab0-4edc-8244-26844664a68e', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '', 'x-amz-id-2': '', 'date': 'Thu, 10 Nov 2022 14:10:15 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '1711'}, 'RetryAttempts': 0}}
解决方案
这是正常现象,Kinesis的ListStreams API并不采用NextToken做分页标记,它的分页逻辑依赖两个核心参数:
HasMoreStreams:值为True时表示还有未返回的流数据ExclusiveStartStreamName:下一次调用时传入上一页返回的最后一个流名称,以此获取后续分页数据
boto3的分页器已经帮你封装了这套分页逻辑,你无需手动处理分页标记,直接遍历response_iterator就能自动获取所有分页的流数据。如果需要手动控制分页流程,可以绕过分页器,直接循环调用list_streams接口:
import boto3 session = boto3.Session(profile_name='', region_name='us-east-1') client = session.client('kinesis') exclusive_start_stream = None while True: response = client.list_streams( ExclusiveStartStreamName=exclusive_start_stream, Limit=5 ) print(response['StreamNames']) if not response['HasMoreStreams']: break exclusive_start_stream = response['StreamNames'][-1]
内容的提问来源于stack exchange,提问作者jebaseelan ravi
相关产品推荐
相关产品推荐

