(一)kafka基础框架
A. 什么是kafka
kafka是MQ(即消息中间件),所有消息中间件都是基于生产者-消费者模型来设计的;
早期数据量不大、系统不复杂时,只要有blocked queue就能实现该模型基本功能;
由于微服务兴起,系统被拆分多个子系统(工程),使用MQ完成多个服务作为生产者和消费者。
kafka早期应用场景时记录网站用户的活动追踪、日志聚合等。
B. 消息中间件的功能
-
解耦
原场景:组件a向组件b,c,d发送信息,现在需要改向b,c,e发送,这需要修改代码才能行实现;
新场景:采用MQ,可让a作为生产者,发送信息给MQ,然后让后端bcde作为消费者自行订阅MQ中的信息(即不同topic);
-
异步
原场景:客户端发送信息给a,a处理完(耗时20ms)后逐个向b,c,d发送消息,bcd各自需耗时200ms处理再返回给a,由a最后给到client已完成,共计用时200*3+20=620ms;
新场景:客户端依然发送给a组件,a作为生产者经20ms处理后转发给MQ,此时a可以直接回复client已完成,共计耗时20ms(无需等待bcd消费者处理的时间);
削峰:业务高峰期时生产速度比消费速度快,但未及时消费的数据可以积压在MQ,在延后一段时间完成消费,保证不被打爆。
C. kafka优缺点
-
优点:
高吞吐:10w/s;
易于横向扩展;
社区活跃度高
-
缺点:
功能不丰富,缺乏插件;
主要用于大数据领域(或日志消息等)
-
瓶颈:
核心性能瓶颈是网络带宽
磁盘 & 内存也是需要注意的,关系到页缓存和顺序写入
D. kafka的竞品
-
rocketMQ:
吞吐能力和kafka一般(10w/s),扩展性也很好,且经过阿里双11实战;
插件也不丰富,主要用于电商场景
-
rabbitMQ:
插件丰富,基于erlang实现(低延时);
但吞吐一般、扩展能力弱