Kafka定义:是一个的基于的(Message Queue),主要应用于大数据实时处理领域。现在被定义为是一个。
发布/订阅:消息的发布者,而是将发布的消息分为不同的类别,。
试想,若 kafka是直接将消息推送给特定的订阅者,那么订阅者的消费速度怎么保证能跟得上推送的速度?面对不同的订阅者,怎么保证它们消费的速率一致?
作为消息队列,主要应用场景包括:。
1、缓存/消峰
有助于控制和优化数据经过系统的速度,解决生产消息和消费消息处理速度不一致的情况。
2、解耦
弱化双方的关联关系,不再要求其强依赖的关系。
假设我们要对一件事件进行解耦动作,首先我们抓住事件的主线,将分支事件进行拆解出去。主线不依赖于分支事件的执行情况,分支事件不依赖于主线的执行返回。
解耦的好处在于:
- 提升接口的响应的 RT(异步消息队列,不再占用主线程的资源);
- 能够提升接口的可用性(不会因为分支事件的执行失败影响主线的执行);
3、异步通信
允许用户把一个消息放入到消息队列中,但不立即处理它,然后在需要的时候再去处理它们。
消息队列的两种模式:
- 点对点模式。其中包括了 poll拉模式,push推模式。
-
发布/订阅模式
用 Rabbit MQ与 Kafka的相关概念进行对比的话:
Rabbit MQ | Kafka |
---|---|
queue | topic |
同一个消息被多个消费者消费:往 exchange(绑定多个 queue)上推送消息 | 多个消费组消费同一个 topic |
消费完成后就删除掉 | 不删除,按照一定的策略进行删除;消费后改变偏移量 offset |
Kafka的基础架构:
注意看,同一个分区的 leader和 follower分布在不同的服务器 broker上,这样就能很好的避免因为某个 broker挂掉后造成服务不可用了。
一个分区只能被一个消费者进行消费,而一个消费者可以消费多个分区中的 topic消息!