Kafka 分片存储机制
Broker:消息中间件处理结点,一个 Kafka 节点就是一个 broker,多个 broker 可以组成一个 Kafka集群。
Topic:一类消息,例如 page view 日志、click 日志等都可以以 topic 的形式存在,Kafka 集群能够同时负责多个 topic 的分发。
Partition:topic 物理上的分组,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。
Segment:partition 物理上由多个 segment 组成,下面有详细说明。
offset:每个 partition 都由一系列有序的、不可变的消息组成,这些消息被连续的追加到 partition中。partition 中的每个消息都有一个连续的序列号叫做 offset,用于 partition中唯一标识的这条消息。
topic 中 partition 存储分布

- 每个 partion(目录)相当于一个巨型文件被平均分配到多个大小相等 segment(段)数据文件中。但每个段 segment file 消息数量不一定相等,这种特性方便 old 磁盘顺序读取的速度非常快,比随机读取要快segment file 快速被删除。(默认情况下每个文件大小为 1G)
- 每个 partiton 只需要支持顺序读写就行了,segment 文件生命周期由服务端配置参数决定。
存.index和.log文件,通过索引来定位log文件中的消息
这样做的好处就是能快速删除无用文件,有效提高磁盘利用率。
Kafka 消息分发和消费者 push、pull 机制
消息分发
Producer 客户端负责消息的分发
- kafka 集群中的任何一个 broker 都可以向 producer 提供 metadata 信息,这些 metadata 中包含”集群中存活的 servers 列表”/”partitions leader 列表”等信息;
- 当 producer 获取到 metadata 信息之后, producer 将会和 Topic 下所有 partition leader 保持socket 连接;
- 消息由 producer 直接通过 socket 发送到 broker,中间不会经过任何”路由层”,事实上,消息被路由到哪个 partition 上由 producer 客户端决定;比如可以采用”random”“key-hash”“轮询”等,如果一个 topic 中有多个 partitions,那么在 producer 端实现”消息均衡分发”是必要的。
- 在 producer 端的配置文件中,开发者可以指定 partition 路由的方式。
Kafka分片存储、消息分发和持久化机制
原文:https://www.cnblogs.com/wusier/p/14648955.html