【Kafka零基础学习】日志存储
1、消息流转过程
下图演示了一个简单的Kafka消息流转过程。
Kafka Produce仅发送包含有topic为staff,partition为0的Client Request到Kafka Broker,关于Client Request格式的详细组成,可参考我的另一篇文章“Broker Produce一张图详(https://www.jianshu.com/p/2606b42d7f7e
)”。经过Kafka Broker的处理后,消息最终被追加到对应topic 'staff'和partition '0'的Active日志文件中(Active也即最新创建的日志文件)。为了便于查找,每一个日志文件都会对应到一个索引文件。
2、Broker大致处理过程
上一小节并没有说明如何处理ClientRequest的,大致处理流程如下。
image.png
2.2、Log
一个Log对象对应一个partition,Log对象中包含多个LogSegment。一个LogSegment对象对应一个log和index文件组合。一个FileMessageSet对象对应一个Log文件。一个OffsetIndex对象对应一个Index文件。
Broker处理逻辑会根据topic和partition找到消息对应的Log对象,并调用Log.append方法去追加消息。Log对象在真正追加消息前,需要筛选出合法的Messages,并将合法消息转换成ByteBufferMessageSet对象。Log对象查找Active的LogSegment对象,并调用LogSegment.append。
2.3、LogSegment
在LogSegment.append中主要做两件事。第一件事,检查是否满足追加索引文件的条件,若满足则调用OffsetIndex.append。另外一件事,调用FileMessageSet.append追加消息。
2.4、FileMessageSet
追加消息到active的日志文件中。
2.5 OffsetIndex
追加索引到active的索引文件中。