【Kafka零基础学习】日志存储

2018-07-31  本文已影响14人  文竹小二

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也即最新创建的日志文件)。为了便于查找,每一个日志文件都会对应到一个索引文件。

image.png

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的索引文件中。

上一篇下一篇

猜你喜欢

热点阅读