Kinesis python 客户端丢弃任何带有“\x”转义符的消息?
Kinesis python client drops any message with "\x" escape?
我正在使用 boto3(版本 1.4.4)与亚马逊的 Kinesis 对话 API:
import boto3
kinesis = boto3.client('kinesis')
# write a record with data '\x08' to the test stream
response = kinesis.put_record(StreamName='test', Data=b'\x08', PartitionKey='foobar')
print(response['ResponseMetadata']['HTTPStatusCode']) # 200
# now read from the test stream
shard_it = kinesis.get_shard_iterator(StreamName="test", ShardId='shardId-000000000000', ShardIteratorType="LATEST")["ShardIterator"]
response = kinesis.get_records(ShardIterator=shard_it, Limit=10)
print(response['ResponseMetadata']['HTTPStatusCode']) # 200
print(response['Records']) # []
当我使用没有 \x
转义的任何数据对其进行测试时,我能够按预期取回记录。 Amazon boto3's doc 说 "The data blob can be any type of data; for example, a segment from a log file, geographic/location data, website clickstream data, and so on." 那么为什么带有 \x
转义字符的消息会被丢弃?在将数据发送到 kinesis 之前,我需要 '\x08'.encode('string_escape')
吗?
如果您有兴趣,我在消息数据中有类似 \x08
的字符,因为我正在尝试将序列化协议缓冲区消息写入 Kinesis 流。
好吧,我终于明白了。它不起作用的原因是因为我的 botocore 版本为 1.4.62
。我之所以意识到这一点,是因为 运行 在我同事的机器上运行良好的另一个脚本在我的机器上抛出了异常。我们有相同的 boto3 版本但不同的 botocore 版本。在我 pip install botocore==1.5.26
其他脚本和我的 kinesis put_record
开始工作后。
tldr:botocore 1.4.62
在很多方面都严重损坏,所以现在升级。我不敢相信我的生命有多少被过时的破图书馆浪费了。我想知道 Amazon 开发人员是否可以取消发布损坏的客户端版本?
我正在使用 boto3(版本 1.4.4)与亚马逊的 Kinesis 对话 API:
import boto3
kinesis = boto3.client('kinesis')
# write a record with data '\x08' to the test stream
response = kinesis.put_record(StreamName='test', Data=b'\x08', PartitionKey='foobar')
print(response['ResponseMetadata']['HTTPStatusCode']) # 200
# now read from the test stream
shard_it = kinesis.get_shard_iterator(StreamName="test", ShardId='shardId-000000000000', ShardIteratorType="LATEST")["ShardIterator"]
response = kinesis.get_records(ShardIterator=shard_it, Limit=10)
print(response['ResponseMetadata']['HTTPStatusCode']) # 200
print(response['Records']) # []
当我使用没有 \x
转义的任何数据对其进行测试时,我能够按预期取回记录。 Amazon boto3's doc 说 "The data blob can be any type of data; for example, a segment from a log file, geographic/location data, website clickstream data, and so on." 那么为什么带有 \x
转义字符的消息会被丢弃?在将数据发送到 kinesis 之前,我需要 '\x08'.encode('string_escape')
吗?
如果您有兴趣,我在消息数据中有类似 \x08
的字符,因为我正在尝试将序列化协议缓冲区消息写入 Kinesis 流。
好吧,我终于明白了。它不起作用的原因是因为我的 botocore 版本为 1.4.62
。我之所以意识到这一点,是因为 运行 在我同事的机器上运行良好的另一个脚本在我的机器上抛出了异常。我们有相同的 boto3 版本但不同的 botocore 版本。在我 pip install botocore==1.5.26
其他脚本和我的 kinesis put_record
开始工作后。
tldr:botocore 1.4.62
在很多方面都严重损坏,所以现在升级。我不敢相信我的生命有多少被过时的破图书馆浪费了。我想知道 Amazon 开发人员是否可以取消发布损坏的客户端版本?