MST

星途 面试题库

面试题:消息队列 Kafka 中常见的消息序列化方式有哪些及各自特点

在 Kafka 开发里,消息序列化与反序列化是重要环节。请阐述 Kafka 常用的消息序列化方式,比如 Avro、JSON、Protobuf 等,并说明每种方式在数据结构定义、性能、可读性等方面的特点。
34.1万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

Avro

  • 数据结构定义:使用 Avro 模式(Schema)来定义数据结构,Schema 采用 JSON 格式,具有自描述性,数据和 Schema 可以一起存储或传输。例如定义一个简单用户信息 Schema:
{
  "type": "record",
  "name": "User",
  "fields": [
    {"name": "name", "type": "string"},
    {"age": "int"}
  ]
}
  • 性能:序列化后的数据紧凑,空间占用小,编解码速度较快,特别适合大数据量传输场景。由于 Schema 的存在,在处理不同版本数据时具有较好兼容性。
  • 可读性:Avro 数据本身是二进制格式,直接阅读较困难,但 Schema 以 JSON 格式定义,相对容易理解和维护。

JSON

  • 数据结构定义:数据结构基于 JSON 语法,非常灵活,无需预定义严格模式(虽然也可通过 JSON Schema 定义)。例如:
{
  "name": "John",
  "age": 30
}
  • 性能:序列化后的数据文本格式,相对较冗长,占用空间大,编解码性能一般,在高吞吐量场景下可能成为瓶颈。
  • 可读性:可读性极佳,几乎任何编程语言都能轻松解析和生成,易于调试和开发。

Protobuf

  • 数据结构定义:通过 .proto 文件定义数据结构,然后使用工具生成对应语言代码。例如:
syntax = "proto3";

message User {
  string name = 1;
  int32 age = 2;
}
  • 性能:序列化后的数据紧凑,空间占用小,编解码速度非常快,适合对性能要求极高的场景。
  • 可读性:数据二进制格式可读性差,.proto 文件虽简洁但不如 JSON 直观,开发调试相对复杂。