1. Kafka是什么
kafka是一个分布式
的基于发布/订阅模式的消息队列(Message Queue),消息队列简称MQ,MQ属于Java中的JMS规范,而Kafka是JMS规范的一种实现
2. 消息队列应用
同步处理优化为异步处理举例
引入消息队列优点
- 解耦(实现角度):要增强短信功能,并不会影响到修改注册信息写入数据库逻辑。
- 提高系统可用性(系统的可用性角度):发送短信某一段时间不可用了,并不会影响到注册功能的使用。
- 缓冲作用,匹配生产者与消费者的处理速度:一般来说生产消费模型都是需要缓冲的,总有一个快慢。如上述注册功能需要10ms,发送短信需要500ms,如果我们引入MQ,让发送短信功能在MQ消费使用,那么我们的注册功能可以提供性能50倍
- 流量削峰: 对于突发流量,可能将我们的应用直接击垮,由于MQ具有缓冲作用可以顶住突发压力。如果MQ也顶不住了,我们希望不可用的是中间件MQ,而不是整个应用
3. 消息队列的两种模式
点对点模式( 一对一 ,消费者主动拉取数据,Queue收到确认消费后清除消息)
消息生产者
- 生产消息从队列尾部顺序发送到Queue中
消息消费者
- 消息消费者从Queue头部取出消息
- 消息消费者处理完消息后,向Queue发出已消费的信号
- 从Queue中删除该消息
- 重复步骤1,若没有消息,阻塞
发布/订阅模式( 一对多 ,Queue收到确认消费后不会清除消息,故需要维护消费的偏移量)
Topic概念,一个Topic可以理解为一个Queue。
生产者可以向Topic中发送消息,消费者只要订阅了Topic,即可收到生产者发送的消息
消息生产者
- 生产消息从队列尾部顺序发送到Queue中
消息消费者
- 消息消费者从Queue头部取出消息
- 消息消费者处理完消息后,向Queue发出已消费的信号
- 重复步骤1,若没有消息,阻塞
多个消息消费者消费同一个topic是互不影响的
4. Kafka基础架构
- Producer :消息生产者,向kafka broker 发消息的客户端;
- Consumer :消息消费者,向kafka broker 取消息的客户端;
- Consumer Group (CG):消费者组,由多个consumer 组成。
消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响
。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者
- Broker :一台kafka 服务器就是一个broker。一个集群由多个broker 组成。一个broker可以容纳多个topic。
- Topic :可以理解为一个队列,生产者和消费者面向的都是一个topic;
- Partition:为了实现扩展性,一个非常大的topic 可以分布到多个broker(即服务器)上,
一个topic 可以分为多个partition
,每个partition 是一个有序的队列; - Replica:副本,为保证集群中的某个节点发生故障时,
该节点上的partition 数据不丢失,且kafka仍然能够继续工作 kafka提供了副本机制
,一个 topic的每个分区都有若干个副本,一个leader
和若干个follower
。 - leader 每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 leader。
- follower 每个分区多个副本中的“从”,实时从 leader中同步数据,保持和 leader数据的同步。 leader发生故障时,某个 follower会成为新的 follower。