简介
kafka是一种消息队列
应用场景
- 缓冲消峰
- 有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况
- 双十一的时候,服务器只有1s中处理一千万次的能力,但系统巅峰需求为1s处理一亿,这时使用消息队列,我不管你需求多少,通通给你放进消息队列,我一次就处理一千万
- 解耦
-
- 允许独立的扩展或修改两边的处理过程,只要确保他们遵守同样的接口约束
-
- 消息队列相当于是 一个超市,数据源是厂家,目的地是消费者,消费着从超市里购买商品而不需要直接联系厂家
- 消息队列相当于是 一个超市,数据源是厂家,目的地是消费者,消费着从超市里购买商品而不需要直接联系厂家
- 异步通信
-
- 允许用户把一个消息放入队列,但不立即处理它,然后再需要的时候再去处理他们
-
- 同步处理要把所有任务执行完成才能返回,浪费时间和资源,应该先把核心的任务做完就返回,再利用异步通信把发短信的任务放在消息队列中一个个处理
- 同步处理要把所有任务执行完成才能返回,浪费时间和资源,应该先把核心的任务做完就返回,再利用异步通信把发短信的任务放在消息队列中一个个处理
消息队列的两种模式
-
点对点模式
-
- 消费者主动拉取数据,消息收到后就删除
- 消费者主动拉取数据,消息收到后就删除
-
发布/订阅模式
-
- 可以有多个topic主题(浏览、点赞、收藏、评论),方便订阅者根据主题订阅
-
- 消费者删除数据之后不会删除数据,其他消费者可以再次这个数据
-
- 每个消费者相互独立,都可以消费数据
kafka基础架构
- 为方便扩展,并提高吞吐量,一个topic分为多个partition
-
- 每个分区只能由一个消费者消费
- 配合分区的设计,提出消费者组的概念,组内每个消费者并行消费
- 为提高可用性,为每个partition增加若干副本
-
- 副本和本体是有区别的
-
- 主体作为leader,副本作为follower
-
- 生产和消费全都是在leader中发生,除非leader挂掉,follower有机会上位成leader
- zookeeper
-
- 记录哪几台服务器上线 broker就是服务器
-
- 记录存储的哪个是leader哪个是fower
- 记录存储的哪个是leader哪个是fower