gpt4 book ai didi

java - 获取 Kafka 压缩消息大小

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:05 24 4
gpt4 key购买 nike

我想知道kafka中一条消息的压缩大小。

我使用 kafka 1.1.0 和 java kafka-connect 1.1.0 将消息从我的生产者发送到主题。

如果消息对我的生产者来说太大了,我会得到一个

The message is xxx bytes when serialized which is larger than the maximum request size you have configured with the max.request.size configuration.

将 max.request.size 设置为合适的值会导致来自代理的错误消息,因为 message.max.bytes 也必须相应地在代理配置中进行调整。不幸的是,错误消息不包括代理收到的消息的大小。我调整了 message.max.bytes。到目前为止一切顺利。

如果我在生产者端激活压缩,max.request.size 仍然必须与未压缩时的大小相同,因为不幸的是,代码在压缩之前比较了未压缩消息的大小(参见 https://issues.apache.org/jira/browse/KAFKA-4169)

但是通过压缩,我可以减少代理中的 message.max.bytes。问题是我在任何时候都无法确定此压缩消息的大小。有什么方法可以在发送消息之前或稍后在日志文件中在生产者代码中解决这个问题吗?

在我使用压缩的情况下,message.max.bytes 的默认值 1MB 就足够了,因此我不必更改默认配置。但我想知道我的压缩消息是低于 1MB 还是只有 0.99MB。在那种情况下,我可能会在生产中增加 message.max.bytes 以避免出现问题。

在此先感谢您的支持。

最佳答案

你可以做的是使用压缩库,自己压缩消息,在发送前检查大小。例如,假设您正在使用 lz4 压缩,您可以使用 lz4-java lib,然后使用类似的东西:

private static LZ4Compressor COMPRESS = LZ4Factory.fastestInstance().highCompressor();

String meMessageString = "My Message that I am sending to kafka";
byte[] uncompressedBytes = jsonRequest.getBytes();
long lz4compressedLength = COMPRESSOR.compress(uncompressedBytes).length;

关于java - 获取 Kafka 压缩消息大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50251660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com