有没有办法找出Kafka进行数据序列化所花费的时间

时间:2019-11-28 09:54:21

标签: java serialization apache-kafka avro kafka-producer-api

我想确定Kafka序列化不同数据格式所花费的时间。并且怀疑我是否可以这样做(因为我认为这是在Kafka方面完成的。)如果是,我们该怎么做?在message.send()之后进行序列化吗? 另外,我还在检查可用的Kafka监控指标,也没有在他们的文档中找到与此相关的任何内容。曾将request-latency-avg视为一种可能的指标,但它的值似乎太高,无法仅作为序列化部分。 有人可以建议相同的东西吗?

2 个答案:

答案 0 :(得分:1)

Kafka具有用于多种格式的内置序列化器和反序列化器,例如Strings,Long,ByteArrays,ByteBuffers,并且社区具有JSON,ProtoBuf,Avro。

如果您关注序列化和反序列化的性能,则可以检查一些基准测试的结果:https://labs.criteo.com/2017/05/serialization/

作者得出的结论:

  在文件大小方面,

Protobuf Thrift具有相似的性能   和序列化/反序列化时间。稍微好一点   Thrift的表现并没有超过轻松,低风险的表现   集成Protobuf,因为它已经在我们的系统中使用,因此   最终选择。 Protobuf也有更好的文档,而   节俭缺乏它。幸运的是,缺少了帮助我们的指南   快速实施Thrift进行基准测试。

     

https://diwakergupta.github.io/thrift-missing-guide/#_types   如果您的物体很小,则不应该使用Avro 。但是看起来很有趣   如果您有非常大的物体而没有复杂的数据,则可以提高速度   难以表达的结构。 Avro工具也看起来更多   与跨语言开发相比,针对Java世界的目标更大。 C#   实施的错误和局限性令人沮丧。

答案 1 :(得分:0)

Kafka没有任何API来标识串行器/解串器上的性能编号,如果您使用的是基本的串行器/解串器,也没有任何关系。  您真的很感兴趣,可以构建自定义的序列化器/反序列化器,然后尝试从那里获取编号。

对于自定义序列化器/反序列化器,您可以参考下面已回答的链接 Custom serializer/deserializer