kafka概述
一、消息队列
(1)常见的消息队列:RocketMQ,kafka
(2)传统消息队列的应用场景:异步处理,具体场景:用户为了使用某个应用,进行注册,系统需要发送注册邮件并验证短信。对这两个操作的处理方式有两种:串行及并行。
1、串行处理:新注册信息生成后,先发送注册邮件,再发送验证短信;
2、并行处理:新注册信息写入后,由发短信和发邮件并行处理;
(3)应用消息队列的好处
1、解耦:多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败;
2、异步处理:多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理,减少处理时间;
3、限流削峰:在访问量剧增的情况下,应用仍然需要继续发挥作用;使用消息队列,能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。
4、 缓冲:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。
(4)消息队列的两种模式:点对点模式,发布订阅模式。
1、点对点模式
1)概念:生产者生产消息发送到消息队列中,然后消费者从消息队列中取出并且消费消息。消息被消费以后,消息队列中不再有存储,所以消息接收者不可能消费到已经被消费的消息。
2)特点:
a、每个消息只有一个接收者(Consumer)(即一旦被消费,消息就不再在消息队列中);
b、发送者和接收者间没有依赖性,发送者发送消息之后,不管有没有接收者在运行,都不会影响到发送者下次发送消息;
c、接收者在成功接收消息之后需向队列应答成功,以便消息队列删除当前接收的消息;
2、发布订阅模式(消费者消费数据之后一般不会清除数据)
1)概念:消息生产者(发布)将消息发布到 topic 中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到 topic 的消息会被所有订阅者消费。
2)模式分类:第一种消费者主动从消息队列中拉取数据(消费者必须维护一个长轮询来查看消息队列中是否有数据),第二种消息队列推送消息给消费者(生产者生产数据与消费者消费数据的速率不匹配)。