kafka学习(四)---kafka工作流和消息存储
之前有说到过 kafka 的架构图,根据架构图 kafka 工作流程可以表达为下图机制。
流程已经很清楚,生产者写消息到 kafka 集群,消费者 [组] 从 kafka 集群中消费消息。另外,其中的 0,1,2...就是消息的 offset,保存在 partition 中。
其中有几点值得注意:
1. 为了容灾,leader 和 follower 一定不在同一个 broker 内。
2.生产者写入和消费者消费的 partition 对象都是leader,而 follower 则主动与 leader 同步,等到 leader 刮掉以后,由 follower 代替 leader。
3.为了提高负载和消费效率,针对某一个 topic,kafka 会在不同的 broker 创建 partition(分区)。比如对于 topicA,分别在 broker0,broker1,broker2 上创建了 topicA 的三个分区 partition0,partition1 和 partition2。
4.kafka 消息默认保存时间为 7 天。
5.kafka 区内有序,但是不保证全局有序(也就是消费者消费消息的顺序和生产者生产的消息的顺序一致)
topic 是逻辑上的概念,而 partition 是物理上的概念,每个partition 对应于一个 log 文件,log 文件中存储的就是 producer 生产的数据,producer 生产的数据会不断追加到 log 文件的末尾,并且每条消息都有自己的 offset。消费者组中的每个消费者,都会保存自己消费到了哪个 offset,以便出错恢复时,从上次位置继续消费。
接下来看看保存在 data 目录下的 topic 各分区的数据是什么样的。
这里查看了 forthTopic 的 0 号分区中消息数据,其中
接下来看一个图就会对消费者如何从上次消费的地方继续消费一目了然。