一 简介
kafka是一个分布式的消息队列, 在对消息进行保存时, 根据topic进行归类, 消息发送者称为producer, 消息消费者称为consumer, kafka集群可以有多个kafka实例, 每个实例称为broker, 无论是kafka集群还是单机, 都依赖于zk集群保存一些meta信息
q : 为什么说kafka是分布式的??
同一个kafka集群有共同拥有一个topic, 而同一个topic又拥有不同的分区,不同的分区可以分布在不同的borker上也就是不同的机子上,所以,分区是分布式的,则数据也是分布式的,kafka就是分布式
二 消息传递方式
点对点传递模式 :?
?生产者生产一条消息, 只能由一个消费者进行消费(只有一个消费者组订阅了这个topic)
发布-订阅消息传递模式 :?
?生产者生产一条消息, 全部订阅了这个topic的消费者组都可以获取这条消息
三 kafka优点
- 解耦?
- 副本 : 处理数据的过程失败, 并且数据还没有持久化, 可能会造成数据丢失, 消息队列会对数据进行持久化
- 扩展性
- 削峰 : 防止突发的访问压力, 超负荷的请求将服务打垮
- 可恢复性
- 顺序保证 : kafka保证同一个partition内的信息有序
- 缓冲
- 异步通信
四 架构
?结构名称解释 :?
- producer : 消息生产者, 就是向kafka broker发送消息的客户端
- consumer : 消息消费者, 向 kafka broker获取消息的客户端
- topic : 一个主题, 用来存储消息
- consumer group : 消费者组, 一个消费者组中可以有多个消费者, 每个消费者只能订阅topic的一个分区,因此一个消费者组中消费者的个数应该小于他订阅topic的分区数,不然会有消费者进行空转, 一个topic可以被多个消费者组订阅
- broker : 一台kafka服务器就是一个broker, 一个集群由多个broker组成, 一个broker中可以容纳多个topic
- pritition : 一个topic可以分为多个pritition,? 每一个partition都是一个有序队列, partition中的每条消息都会被分配一个有序的id(offset), kafka只能保证按照一个partition中的顺序将消息发送给consumer, 不能保证一个topic的整体(对各partition间)有序
- offset : kafka的存储文件是按照offset.kafka来命名的, 用offset做名字可以方便查找,老版本的kafka将offset存储在zk中, 新版本的kafka将offset存储在kafka中, offset主要用来记录消息被消费的位置
- replication :?pritition 的副本, 用来保证 leader partition宕机数据不会丢失, 因此副本不能与主版本存在用一个broker中
从上图中可以看出 : producer A向topic A中生产消息, topic A有两个分区, 副本数也是2, 生产者只向leader partition生产消息, follower partition从leader partition中复制消息, 消费组中consumer A消费topic A pritition0中的数据, consumer B 消费topic A pritition1中的数据,consumer C消费 broker3中的数据,? broker3只有一个分区, 消费者的全部信息存储在zk中(老版本的kafka)
|