题目:Kafka 的消息的结构是什么样的
难度:low
标签:db/mq/kafka, mq/kafka, general/knowledge, difficulty/low
评分:⭐⭐☆☆☆(2/5)
Kafka 消息体的结构,这块我没有太大印象,但是基础应该包含内容我能想不到。首先必须要有唯一的 ID,明确这个 Kafka 的消息的消息具体是什么信息,是什么位置啊。然后其实就是偏移量,如何读取这条数据。然后是大小,这个消息大概有多大。然后是消息体,消息内容。暂时我能想到的一个消息的基本结构应该就是这个样子的,可能还会包括,应该还会包括 topic,就是标,具体归属于哪个主题。
优点:
不足:
补充:
核心考点定位:考察对 Kafka 底层消息存储格式的掌握,判断是否真正理解 Kafka 的消息如何被写入磁盘、如何被压缩、如何被消费者正确解析。
知识点拆解:
attributes(压缩类型、isDeleted)length(key 长度)、key(分区路由键)length(value 长度)、value(消息体)numHeaders + headers(键值对,用户自定义元数据)timestamp、offsetDelta(相对 baseOffset 的偏移)baseOffset、batchLength、partitionLeaderEpochmagicValue(版本号,2)crc(32 位,覆盖除自身外的所有字节)attributes、lastOffsetDelta、firstOffsetDeltanumRecords、记录集合从「单条消息」演进到「批次消息」,是 Kafka 追求吞吐与压缩率的直接体现。
考察方向:
延伸递进面试题:
面试官您好,Kafka 的消息结构其实经历过一次比较大的演进。0.10 之前用的是 MessageSet,一条消息就是一个独立的结构;从 0.11 开始改成了 RecordBatch,一个批次打包多条 Record,这样做的好处是压缩和 CRC 都按批次做,性能和压缩率都上去了。
单条 Record 里最重要的字段有几个:第一个是 Key,这个是消息路由到哪个 Partition 的依据,同一 Key 一定落同一分区,用来保证同一业务实体的顺序;第二个是 Value,也就是消息体;然后是 Headers,0.11 引入的键值对,可以放用户自定义的元数据,比如链路追踪的 traceId;再就是 Timestamp,用来做数据保留和消息压缩的策略;还有 offsetDelta,是相对 baseOffset 的偏移量。
RecordBatch 头部有 baseOffset,代表这一批起始的偏移;CRC 用来校验整批数据;partitionLeaderEpoch 用来感知 Leader 切换。
所以真正理解 Kafka 消息结构,关键有两点:一是 Key 决定路由和顺序;二是 0.11 之后从单条消息演进到批次消息,是为了批量压缩和零拷贝读放大,这也是 Kafka 高吞吐的底层原因之一。
题目:Kafka 的消息的结构是什么样的
难度:low
标签:db/mq/kafka, mq/kafka, difficulty/low
评分:⭐⭐⭐☆☆(3/5)
练习次数:2
Kafka 消息结构,首先要有消息体、消息头两部分。消息头中要有 topic、partition,确定具体消费的内容,消息在哪。还有消息的 ID 还有偏移量。消息体中要有消息的信息,具体消息内容是什么?理解主要有这些内容。另外应该还有状态,消息的消费状态。
优点:
不足:
(topic, partition, offset) 三元组补充:
__consumer_offsets 内部 topicbaseOffset + offsetDelta 表示每条位置,比 0.10 的 MessageSet 压缩率更好ℹ️ 完整讲解见上方首次记录(2026-09-22)