前两天和一个哥们讨论了一下kafka的性能问题,感觉现在要想干实时项目,还得把kafka捡起来好好学一遍,今天就简单来说一说自己对于kafka的一点了解,也是让自己再重新复习一遍,希望能对各位有所帮助

  kafka在业务场景中最重要的功能其实主要就是两个方面:削峰和异步通讯,当然什么解耦呀,减少冗余啊,业务代码的健壮性啊,也是有的,可是生产环境中,主要看的还是削峰和异步通讯这两个方面的功能

kafka削峰填谷设置 kafka 削峰_分布式

一、削峰

  先来说一说削峰,削峰的应用场景主要是上游数据某些时候有突发大流量数据,比如电商系统的双十一双十二这种情况,这个时候下游可能扛不住,或者下游没有足够多的机器来保证冗余,这个时候,kafka就可以在中间起到一个缓冲的作用,它可以把消息暂存在kafka中,下游服务就可以按照自己订单节奏进行慢慢处理,这就是所谓的消息中间件,顾名思义嘛

二、异步

   说到异步通讯,这里举个简单例子,很多时候,用户不想也不需要立刻处理消息,消息队列就提供了异步处理机制,允许用户把一个消息放入队列,但是并不立即处理,等啥时候需要了再去处理这些消息,这样可以极大程度的缓解性能问题,放到电商的具体下单业务场景中,就是用户从下单到付款这个过程,中间可能会有满减优惠,抵用券折扣,积分累计,金币抵用等等等好多个系统,但是一个请求每经过一个系统都会花费一定的时间(即延长了整个流程的时长),但是实际上用户等不了所有流程都结束才能完成订单,为了加快订单完成的时间,所以可以直接跳过那些流程,直接完成订单,但是直接完成订单并不是就不管那些流程到底完不完成,那些流程也会同时处理,只是相当于多线程完成一样

三、补充

  其实在kafka异步通讯过程中,很有可能会出现数据一致性的问题,这个其实是分布式服务本身就存在的一个问题,实际场景中所有的系统流程都成功才能算这一次下单是成功的,所以很多时候需要用到分布式事务,其实就是把下单,优惠券,积分累计,都放在一个事务里面一样,要成功一起成功,要失败一起失败

以上就是工作场景中为啥要用kafka了