Kafka作为一款热门的消息队列中间件,具备高效可靠的消息异步传递机制,主要用于不同系统间的数据交流和传递,在企业解决方案、金融支付、电信、电子商务、社交、即时通信、视频、物联网、车联网等众多领域都有广泛应用。
异步通信
将业务中属于非核心或不重要的流程部分,使用消息异步通知的方式发给目标系统,这样主业务流程无需同步等待其他系统的处理结果,从而达到系统快速响应的目的。
如网站的用户注册场景,在用户注册成功后,还需要发送注册邮件与注册短信,这两个流程使用Kafka消息服务通知邮件发送系统与短信发送系统,从而提升注册流程的响应速度。
图 串行发送注册邮件与短信流程
图 借助消息队列异步发送注册邮件与短信流程
错峰流控与流量削峰
在电子商务系统或大型网站中,上下游系统处理能力存在差异,处理能力高的上游系统的突发流量可能会对处理能力低的某些下游系统造成冲击,需要提高系统的可用性的同时降低系统实现的复杂性。电商大促销等流量洪流突然来袭时,可以通过队列服务堆积缓存订单等信息,在下游系统有能力处理消息的时候再处理,避免下游订阅系统因突发流量崩溃。消息队列提供亿级消息堆积能力,3天的默认保留时长,消息消费系统可以错峰进行消息处理。
另外,在商品秒杀、抢购等流量短时间内暴增场景中,为了防止后端应用被压垮,可在前后端系统间使用Kafka消息队列传递请求。
图 消息队列应对秒杀大流量场景
日志同步
在大型业务系统设计中,为了快速定位问题,全链路追踪日志,以及故障及时预警监控,通常需要将各系统应用的日志集中分析处理。
Kafka设计初衷就是为了应对大量日志传输场景,应用通过异步方式将日志消息同步到消息服务,再通过其他组件对日志做实时或离线分析,也可用于关键日志信息收集进行应用监控。
日志同步主要有三个关键部分:日志采集客户端,Kafka消息队列以及后端的日志处理应用。
- 日志采集客户端,负责用户各类应用服务的日志数据采集,以消息方式将日志“批量”、“异步”发送Kafka客户端。
Kafka客户端批量提交和压缩消息,对应用服务的性能影响非常小。
- Kafka将日志存储在消息文件中,提供持久化。
- 日志处理应用,如Logstash,订阅并消费Kafka中的日志消息,最终供文件搜索服务检索日志,或者由Kafka将消息传递给Hadoop等其他大数据应用系统化存储与分析。
图 日志同步示意图
上图中Logstash、ElasticSearch分别为日志分析和检索的开源工具,Hadoop表示大数据分析系统。