获取Kafka压缩邮件大小

时间:2018-05-09 10:54:39

标签: java apache-kafka kafka-producer-api apache-kafka-connect

我想知道kafka中邮件的压缩大小。

我使用kafka 1.1.0和java kafka-connect 1.1.0将来自我的制作人的消息发送到主题。

如果邮件对我的制作人来说太大,我会得到一个

  

序列化时消息为xxx字节,大于您使用max.request.size配置配置的最大请求大小。

将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以避免出现问题。

感谢你的支持。

2 个答案:

答案 0 :(得分:0)

您所能做的就是使用压缩库,自己压缩消息,在发送之前检查大小。例如,假设您使用的是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;

答案 1 :(得分:0)

要测试活泼的压缩消息,您可以执行以下操作。

pip install python-snappy
python -m snappy -c input.json output.snappy