Kafka设计目标:
- 高吞吐率
在廉价的商用机器上单机可支持每秒100万条消息的读写。
- 消息持久化
所有消息均被持久化到磁盘,无消息丢失,支持消息重放。
- 完全分布式
Producer,Broker,Consumer均支持水平扩展。
- 同时适应
在线流处理
和
离线批处理
。对接spark及hadoop。
Kafka架构图:
- Broker
Kafka集群包含一个或多个服务器,这种服务器被称为broker。
- Topic
每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
- Partition
Parition是物理上的概念,每个Topic包含一个或多个Partition.
- Producer
负责发布消息到Kafka broker。
- Consumer
消息消费者,向Kafka broker读取消息的客户端。
- Consumer Group
每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。
消息发送的流程:
- Producer根据指定的partition方法(round-robin、hash等),将消息发布到指定topic的partition里面
- kafka集群接收到Producer发过来的消息后,将其持久化到硬盘,并保留消息指定时长(可配置),而不关注消息是否被消费。
- Consumer从kafka集群pull数据,并控制获取消息的offset