Kafka是否用Avro、JSON Shema或Protobuf保存二进制消息?

ecfdbz9o  于 2022-10-07  发布在  Kafka
关注(0)|答案(1)|浏览(178)

我试图推送到Kafka中的消息太大了,所以我使用了avro,以便使它们成为二进制的,但从代码的Angular 来看,实现有点糟糕和过于复杂(我需要有模式文件.avsc,maven plugin来生成avro类)。而且看起来JSON模式是更好的选择,因为您只需要POJO上的一些注解,它应该就可以工作(看起来更像Jackson)。

问题是:Avro与JSON模式与Protobuf相比,消息大小有什么不同?如果我将使用JSON模式,它会像Avro一样以二进制形式保存在Kafka中吗?对我来说,模式不是用于验证,而是主要用于减少消息大小。

68bkxrlz

68bkxrlz1#

如果我使用JSON模式,它会以二进制形式保存在Kafka中吗

不是的。数据仍将是UTF-8编码的JSON。

要最大限度地减少主题中的数据,请使用压缩。例如,使用Avro或Protobuf的ZSTD将是最好的压缩,但要权衡速度。

你需要做你自己的基准。相关博客-https://blog.cloudflare.com/squeezing-the-firehose/
从代码的Angular 来看,实现有点糟糕且过于复杂(我需要有模式文件.avsc、Maven插件来生成Avro类)

这称为模式优先实现。这是个人喜好的问题。

例如,如果您正在构建REST API,您可以首先编写OpenAPI规范。
您只需要在POJO上添加一些注解,它应该就能正常工作(看起来更像Jackson

Jackson支持Avro和Protobuf,以及微笑和MsgPack等其他二进制格式。

https://github.com/FasterXML/jackson-dataformats-binary

但是汇流序列化程序类不使用该库,因此您必须使用ByteArraySerializer并手动集成模式注册表。

相关问题