gpt4 book ai didi

json - 与 AVRO 相比,在 kafka 流中使用 JSON 序列化程序会导致性能下降吗?

转载 作者:行者123 更新时间:2023-12-04 01:00:30 24 4
gpt4 key购买 nike

我在我的 Kafka Streams 应用程序中使用以下 JSON 配置,

properties.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG,
Serdes.String().getClass());
properties.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG,
GenericJSONSerde.class);
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
com.buy.json.JsonSerializer.class);
properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
com.buy.json.JsonDeserializer.class);
properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
com.buy.json.JsonSerializer.class);

为了衡量性能,我删除了所有逻辑以及我从 IN 主题收到的所有内容,我只是将其推送到 OUT 主题。 3分钟处理35万条记录

但是当我使用 AVRO 时,同一个流应用程序在 1 分钟内处理了 300 万条记录。这是我的 AVRO 配置,

  `properties.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG,
Serdes.String().getClass());
properties.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG,
GenericAvroSerde.class);
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
io.confluent.kafka.serializers.KafkaAvroSerializer.class);
properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
io.confluent.kafka.serializers.KafkaAvroSerializer.class);
properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
io.confluent.kafka.serializers.KafkaAvroDeserializer.class);
properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
io.confluent.kafka.serializers.KafkaAvroDeserializer.class);`

我正在编写的流应用程序应该同时支持 AVRO/JSON。我将在启动流应用程序时做出决定。

我的问题是:使用 JSON 是否会影响 Streams 应用程序的性能?请澄清。

最佳答案

注意:对于 Confluent 的模式注册表,模式首先通过 HTTP 发送,如评论中所述。

AVRO 显然很快,因为它提供了一种紧凑的二进制数据格式。在序列化期间有一个动态类型和数据标记的概念。

在 AVRO 的情况下,数据和模式(以 JSON 的形式)总是在一起,因此在反序列化期间数据类型信息的大小变得更小,更好地处理静态数据类型并减少代码生成。

这在 JSONSerializer 的情况下不存在。

关于json - 与 AVRO 相比,在 kafka 流中使用 JSON 序列化程序会导致性能下降吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58555514/

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