无法估计Kafka JSON消息的大小

时间:2018-04-07 12:42:28

标签: python json unix apache-kafka

我需要通过Kafka发送JSON消息,但我的应用程序对消息大小有限制。

该消息将由Python脚本构建。该脚本将从文件中读取基本JSON,将其转换并将其写入文件。因此,我需要估计创建的JSON的大小。

主要的问题是,当我将文件加载到python脚本并尝试通过调用sys.getsizeof(json)来检查此json的大小(以字节为单位)时,我得到240。当我通过调用stat -f%z stack.jsoncat stack.json | wc -c使用shell工具检查文件大小时,我得到206。 (我使用macOS High Sierra版本10.13.3)。

最重要的问题是Kafka如何解释邮件大小?这将是206,240还是其他值?

我的JSON(没有空格):

{"metadata":{"info":"important info"},"timestamp":"2018-04-06T12:19:38.611Z","content":{"id":"1","name":"name test","objects":[{"id":"1","url":"http://example.com","properties":[{"id":"1","value":"1"}]}]}}

Python脚本:

import json
import sys


def get_contents_from_json(file_path)-> dict:
    try:
        with open(file_path) as file:
            contents = file.read()
            return json.loads(contents)
    except json.JSONDecodeError:
        print('Error while reading json file')
    except FileNotFoundError:
        print(f'The JSON file was not found at the given path: \n{file_path}')

STACK_JSON = 'stack.json';


if __name__ == '__main__':
    data = get_contents_from_json(STACK_JSON)
    size_of_json = sys.getsizeof(data)
    print(size_of_json)

1 个答案:

答案 0 :(得分:1)

我测试了你的例子并得到了完全不同的结果。

首先,我复制了你给定的json字符串。并使用len(json_str),将其长度设为205。我将其另存为文本文件json_str.json,并将其大小设置为205B。这是有道理的。

其次,我使用sys.getsizeof(json_str)来获取其内存大小并获得254,这也是有意义的,因为python3中的空sting具有49大小。添加205并等于254

所以我真的无法理解你提出的结果。