aru*_*nan 3 json apache-kafka apache-kafka-streams
我在 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);
Run Code Online (Sandbox Code Playgroud)
为了衡量性能,我删除了所有逻辑以及从 IN 主题收到的所有内容,我只是将其推送到 OUT 主题。处理35万条记录需要3分钟
但当我使用 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);`
Run Code Online (Sandbox Code Playgroud)
我正在编写的流应用程序应该支持 AVRO/JSON。我将在启动流应用程序时决定这一点。
我的问题是:在 Streams 应用程序中使用 JSON 会影响性能吗?请澄清。
注意:对于 Confluence 的架构注册表,架构首先通过 HTTP 发送,如评论中所述。
AVRO 显然速度很快,因为它提供了紧凑的二进制数据格式。序列化期间存在数据动态类型和标记的概念。
在 AVRO 的情况下,数据和模式(以 JSON 形式)始终在一起,因此在反序列化期间数据类型信息的大小变得更小,更好地处理静态数据类型并减少代码生成。
这在 JSONSerializer 的情况下不存在。
归档时间: |
|
查看次数: |
5552 次 |
最近记录: |