1. 设计理念概述
Kafka和HBase的设计理念相同, 让整个消息队列系统尽可能的简单. 在这个基础上, 放弃了全局信息一致性, 放弃了维护全局唯一的读取进度的语义等等很多东西. 换来的是单点单CPU每秒2万条1KB message的吞吐量.
基本结构
上图是最常见的一个对kafka的描述图, kafka把自己的worker抽象成多个broker
. 和其它的消息队列系统类似, 消息队列被描述成一个topic
.
Kakfa的topic
在底层是分散在多个broker上的parition, 每个parition物理上是文件系统中连续写的一系列的文件.
每个parition可以被多个producer写, 但同时只能被一个consumer读取.
这样保证了读写过程的都是顺序的批量读, 批量写. 结合文件系统, 把磁盘的性能拉倒极致, 在文件系统blocksize稍微大一点的情况下, 轻松可以拉到800M/s的吞吐.
Kafka为了能够把吞吐量拉高, 使用了sendfile()
系统调用, 直接走内核态来写数据, 这样不过用户态可以少很多overhead. 数据在serializer之后一直以二进制流的形态在kafka系统中流动. 类似的优化后面在阅读代码中会看到很多.
Kafka借助zookeeper来维护整个拓扑结构和配置的一致性, 早期kafka依赖ZK来维护读进度, 在最新版本中这个工作由kafka的节点自己来承担.
2. 规划内容
- Producer概要
- Consumer 新老API 概要
- Coordinator / Consumer Group 概要
- Cluster / Storage 概要
- Controller 概要
网友评论