整个架构中包括三个角色。
- 生产者(Producer):消息和数据生产者
- 代理(Broker):缓存代理,Kafka的核心功能
- 消费者(Consumer):消息和数据消费者
整体架构很简单,Kafka给Producer和Consumer提供注册的接口,数据从Producer发送到Broker,Broker承担一个中间缓存和分发的作用,负责分发注册到系统中的Consumer。
设计要点
Kafka非常高效,下面介绍Kafka高效的原因,对理解Kafka非常用帮助。
- 直接使用Linux文件系统的Cache来高效缓存数据
- 采用Linux Zero-Copy提高发送性能。传统的数据发送需要发送4次上下切换,采用Sendfile系统调用之后,数据直接在内核态交换,系统上下文切换减少为2次。可以提高60%的数据发送性能。
Kafka以Topic来进行消费管理,每个Topic包含多个Part(ition),每个Part对应一个逻辑Log,由多个Segment组成。每个Segment中存储多条消息,消息ID由逻辑位置决定,即从消息ID可直接定位到消息的存储位置,避免ID到位置的额外映射。每个Part在内存中对应一个Index,记录每个Segment中的第一个消息偏移。