目录
定义
Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),不是一个存储系统,数据有时限,默认存7天就是168个小时
消息队列概述
使用场景
好处
- 解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束
- 可恢复性:系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所 以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理
- 缓冲:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况
- 灵活性 & 峰值处理能力:在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。 如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃
- 异步通信:很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们
模式
- 点对点模式(queue):
- 一对一,一条消息只有一个消费者可以消费,想要其他消费者也能消费到,需要再发一条消息
- 消费者主动拉取,消息收到后消息清除(阻塞方式)
- 也可以消费者设置监听(非阻塞方式)
- 消费者不可能消费到已经被消费的数据,因为已经清除了
- 一个queue如果有多个consumer,应该是轮询消费,各个consumer各自消费一点
- 发布/订阅模式(topic):
- 一对多,一条消息能被多个消费者消费,消费者消费数据后不会清除
- 发布/订阅模式其实也分为消费者主动拉取、topic主动推送两种模式
- 消费者主动拉取,可以根据自身的消费能力去拉取数据,但是需要维护一个长轮询去发现topic队列中的数据(kafka就是这种模式)
- topic主动推送方式,可以解决长轮询的性能问题,但是由于不确定消费者的消费能力,可能推送的过快或者推送的过慢,从而导致性能的损耗和浪费