前言:老刘今天写这篇文章首先想对一些复制粘贴的博客表达不满;其次是想用通俗易懂的话解释消息系统;最后欢迎各位英雄好汉、女中豪杰前来battle。
1. 为什么有消息系统? 1.1 背景今天复习kafka知识点的第一个问题是:为什么有消息系统?可能有很多自学大数据开发的人都不怎么注意这个问题,但老刘希望能够用这个小问题来提醒自学大数据开发的人,对于每个问题形成自己的理解真的很重要,即使再小的问题,它都有很大的细节!
在这个问题上,某机构的资料是这样回答的:
看到答案的我表情是这样的!
原谅老刘是个木鱼脑袋,明明问的是为什么,可这个内容回答的是消息系统有什么用,并且对于每个用处的解释,老刘觉得太专业了,实在不能用自己的理解把它们解释出来!
于是,老刘带着疑问去搜了这个问题的相关答案,不查不知道,一查吓一跳,绝大多数的人都是这样的回答,内容和排版都差不多,基本都是复制粘贴别人的内容。(抄别人的东西有意思嘛)
老刘现在不得不感慨,在网上找到一个好的答案真的太难了,真正用自己的理解回答问题的人太难找了!
1.2 解决
那这个小问题最后是如何解决的呢?
老刘在某天饭点突然一激灵,终于明白了为什么和有什么用这两个其实是可以相互转换的!
在这个灵感下,老刘结合网上大佬的内容,对为什么会有kafka消息系统给出了这样的答案。
首先为什么会有kafka消息系统这个问题,要先回答为什么会有消息系统,因为kafka是消息系统的一个实现。
老刘举例说明一下为什么会有消息系统,对消息系统的用处进行形象的解释。
这是第一个例子:
在巧克力的生产过程中,研磨车间把可可豆变成可可粉,再人工传输到加热车间变为巧克力酱,在人工搬到罐装车间,通过巧克力模型,变为各种形状的巧克力。但是呢,人工搬运有点慢,我们就引入了传送带,省掉人工搬运过程。
接着又发现问题,每个车间生产效率是不一样的,研磨车间贼快,加热车间慢,而罐装车间也快。在这种情况下,研磨车间产生的东西太多了,加热车间忙不过来,这个时候就可以设置一个仓库。
这个仓库就相当于我们的消息系统,俗称消息中间件,起到一个缓冲的作用,可以做到削峰填谷。
也相当于送快递,当快递到了,我现在没有时间来取,快递员就把快递放在附件的超市里,等我有空了就去取。
以上就是消息系统具有的缓冲、削峰填谷功能。
现在讲述第二个例子:
传统模式下,当用户下单后,订单系统需要通知库存系统,其实就是调用库存系统的接口。但是,当库存系统出现故障,无法访问的时候,订单减库存就是失败,导致订单失败,这就是订单系统和库存系统耦合。
那我们怎么办呢?
优秀的开发人员引入了消息系统,用户下单后,订单系统完成持久化处理,将消息写入消息系统,返回用户下单成功。然后库存系统采用拉/推的方式,获取下单信息,库存系统就会根据下单信息,进行库存操作。
通过这样的方式,订单系统就和库存系统成功解耦,这就是消息系统的解耦合功能。
由于某些机构的资料以及很多博客的答案都比较具有专业性,老刘实在难以理解,无法用自己的话解释出来。