摘要
Kafka是一个分布式消息队列,提供高性能、高可用的数据传输服务。
分布式是指集群化部署,最终部署在多台物理机上。
高性能是指吞吐量大,每秒可传输数十万条消息。
高可用是指Kafka始终可以正常工作。
Kafka架构设计(高性能设计)
系统架构
生产者负责投送消息,可以是集群。
Broker是消息队列的物理机。
Topic实际是按业务分区,消息按不同业务类型发送到不同的Topic。
Partition是数据分区,可以提高并发度,也可以将不同分区部署在不同机器来实现容错。
消费者组对应的是Topic,一个Topic可根据不同用途创建多个消费者组,一个消费者组可以包含多个消费者来进行并发消费。
关键设计
拉消息而非推消息
传统的消息队列一般是消息过来以后推给下游,那么必须维护分区内的每条消息被下游的各消费者组消费的情况,没消费完就要驻留内存。消息队列的任务很重,消耗就大。
Kafka只提供消息的存储功能,让消费者组自己来拉,每个消费者自己维护消息的消费情况。同时Kafka规定每个分区内的消息只能顺序消费。
分区内存储设计
Kafka规定了同一分区内消息顺序消费,所以一个分区逻辑上是一个文件。但实际存储时将文件拆分为多个大小相同的段文件,同时配一个段索引表。
写入消息时顺序写入最后一个段即可。读取消息时根据消息的偏移量在索引表中映射段文件,然后在段文件中读取消息即可。