【问题标题】:Is there a way to find out the time taken for serialisation of data by Kafka有没有办法找出Kafka序列化数据所花费的时间
【发布时间】:2020-03-23 22:39:36
【问题描述】:

我想计算 Kafka 序列化不同数据格式所花费的时间。并且怀疑我是否可以做到这一点(因为我认为这是在 Kafka 方面完成的。)如果可以,我们该怎么做?序列化是在 message.send() 之后完成的吗? 否则,我也在检查可用的 Kafka 监控指标,但在他们的文档中也没有找到与此相关的任何内容。已经将 request-latency-avg 视为一个可能的指标,但它的值似乎太高而不仅仅是序列化部分。 任何人都可以提出相同的建议。

【问题讨论】:

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


    【解决方案1】:

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

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

    作者总结的地方:

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

    https://diwakergupta.github.io/thrift-missing-guide/#_types 如果您的对象很小,则不应使用 Avro。但看起来很有趣 如果你有非常大的物体并且没有复杂的数据,它的速度 结构,因为它们难以表达。 Avro 工具也看起来更多 面向Java世界而不是跨语言开发。 C# 实现的错误和限制非常令人沮丧。

    【讨论】:

    • 您好,非常感谢您的回答。但是,您能否确认在我们执行 message.send() 之后完成了 Kafka 序列化,并且由于我必须检查一些与上述博客中提到的格式不同的自定义格式,您是否知道我如何自己进行此测试以类似于博客的方式。
    • 在不知道你使用的库的情况下很难说,但是kafka本身并不关心你的消息编码。因此,在大多数情况下,您必须以您的格式编码发送它。要评估格式,您应该将其与网络和 kafka 等其他因素隔离开来。要评估您的 kafka 解决方案,您可以简单地创建一个并行发送消息的生产者和一个消费者并测量吞吐量,然后更改格式并重复。
    【解决方案2】:

    Kafka 没有任何 API 来识别序列化器/反序列化器的性能数字,如果您使用基本的序列化器/反序列化器,也找不到任何问题。 你真的有兴趣可以构建自定义序列化器/反序列化器并尝试在那里获取数字。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多