前言:老刘今天写这篇文章首先想对一些复制粘贴的博客表达不满;其次是想用通俗易懂的话解释消息系统;最后欢迎各位英雄好汉、女中豪杰前来battle。

1. 为什么有消息系统?

1.1 背景

今天复习kafka知识点的第一个问题是:为什么有消息系统?可能有很多自学大数据开发的人都不怎么注意这个问题,但老刘希望能够用这个小问题来提醒自学大数据开发的人,对于每个问题形成自己的理解真的很重要,即使再小的问题,它都有很大的细节!

在这个问题上,某机构的资料是这样回答的:

看到答案的我表情是这样的!

原谅老刘是个木鱼脑袋,明明问的是为什么,可这个内容回答的是消息系统有什么用,并且对于每个用处的解释,老刘觉得太专业了,实在不能用自己的理解把它们解释出来!

于是,老刘带着疑问去搜了这个问题的相关答案,不查不知道,一查吓一跳,绝大多数的人都是这样的回答,内容和排版都差不多,基本都是复制粘贴别人的内容。(抄别人的东西有意思嘛)

老刘现在不得不感慨,在网上找到一个好的答案真的太难了,真正用自己的理解回答问题的人太难找了!

1.2 解决

那这个小问题最后是如何解决的呢?

老刘在某天饭点突然一激灵,终于明白了为什么和有什么用这两个其实是可以相互转换的!

在这个灵感下,老刘结合网上大佬的内容,对为什么会有kafka消息系统给出了这样的答案。

首先为什么会有kafka消息系统这个问题,要先回答为什么会有消息系统,因为kafka是消息系统的一个实现。

老刘举例说明一下为什么会有消息系统,对消息系统的用处进行形象的解释。

这是第一个例子:

在巧克力的生产过程中,研磨车间把可可豆变成可可粉,再人工传输到加热车间变为巧克力酱,在人工搬到罐装车间,通过巧克力模型,变为各种形状的巧克力。但是呢,人工搬运有点慢,我们就引入了传送带,省掉人工搬运过程。

接着又发现问题,每个车间生产效率是不一样的,研磨车间贼快,加热车间慢,而罐装车间也快。在这种情况下,研磨车间产生的东西太多了,加热车间忙不过来,这个时候就可以设置一个仓库。

这个仓库就相当于我们的消息系统,俗称消息中间件,起到一个缓冲的作用,可以做到削峰填谷。

也相当于送快递,当快递到了,我现在没有时间来取,快递员就把快递放在附件的超市里,等我有空了就去取。

以上就是消息系统具有的缓冲、削峰填谷功能。

现在讲述第二个例子:

传统模式下,当用户下单后,订单系统需要通知库存系统,其实就是调用库存系统的接口。但是,当库存系统出现故障,无法访问的时候,订单减库存就是失败,导致订单失败,这就是订单系统和库存系统耦合。

那我们怎么办呢?

优秀的开发人员引入了消息系统,用户下单后,订单系统完成持久化处理,将消息写入消息系统,返回用户下单成功。然后库存系统采用拉/推的方式,获取下单信息,库存系统就会根据下单信息,进行库存操作。

通过这样的方式,订单系统就和库存系统成功解耦,这就是消息系统的解耦合功能。

由于某些机构的资料以及很多博客的答案都比较具有专业性,老刘实在难以理解,无法用自己的话解释出来。

于是,老刘结合了很多例子对消息系统的用处进行了形象的解释,对为什么会有消息系统这个问题也有了大致的答案。对于这个小问题终于能有自己的理解了,不容易啊!

总结一下,对于为什么会有消息系统这个问题,我们可以有这样的理解。

在实际开发过程中,常常有各种千奇百怪需求,突发情况也随时可能发生,比如应用流量暴增、应用崩溃等,为了解决这些情况,优秀的开发人员实现各种消息系统,比如RabbitMQ、RocketMQ、kafka,这些消息系统基本都会有解耦、缓冲、削峰填谷等功能,通过这些功能可以帮助我们在日常开发过程中来应对这些问题。如果时间允许,可以在对每个功能举例说明!

2. 总结

老刘以前写博客,纯粹就是分享自学大数据开发的细节知识点,让同样是自学的伙伴查漏补缺。今天的博客有多个目的,老刘写了一个列表如下:

  1. 提醒所有自学开发找工作的人,无论是看资料还是浏览别人的博客内容,千万不要照搬别人的内容,别人写什么,就去背什么,这样太危险了!

  2. 对于任何知识点,无论多么简单,它都有大大的细节,自己尝试能能用自己的理解把那些专业的知识点翻译为自己的话!

  3. 表达对众多直接复制粘贴的博客表达不满,用心写、用自己的理解写,不好吗?

最后,如果有任何遗漏或者错误的地方,联系公众号:努力的老刘,欢迎各位英雄好汉、女中豪杰前来批评和指点!

为什么会有kafka消息系统?小问题藏着大细节!的更多相关文章

  1. Kafka消息系统基础知识索引

    一些观念的修正 从 0.9 版本开始,Kafka 的标语已经从“一个高吞吐量,分布式的消息系统”改为"一个分布式流平台". Kafka不仅仅是一个队列,而且是一个存储,有超强的堆积 ...

  2. kafka 消息系统

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  3. Kafka消息系统

    一.基本概念 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计. 首先让我们看几个基本的消息系统术语: Kafka将消息以topic为单位进行归纳 ...

  4. 大数据之路【第十篇】:kafka消息系统

    一.简介 1.简介 简 介• Kafka是Linkedin于2010年12月份开源的消息系统• 一种分布式的.基于发布/订阅的消息系统 2.特点 – 消息持久化:通过O(1)的磁盘数据结构提供数据的持 ...

  5. 分布式发布订阅消息系统Kafka

    高吞吐量的分布式发布订阅消息系统Kafka--安装及测试   一.Kafka概述 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览, ...

  6. 发布-订阅消息系统Kafka简介

    转载请注明出处:http://www.cnblogs.com/BYRans/ Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式 ...

  7. 第1节 kafka消息队列:10、flume与kafka的整合使用

    11.flume与kafka的整合 实现flume监控某个目录下面的所有文件,然后将文件收集发送到kafka消息系统中 第一步:flume下载地址 http://archive.cloudera.co ...

  8. Kafka是分布式发布-订阅消息系统

    Kafka是分布式发布-订阅消息系统 https://www.biaodianfu.com/kafka.html Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apa ...

  9. 分布式消息系统:Kafka

    Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务.它主要用于处理活跃的流式数据. ...

随机推荐

  1. 知识解析:C语言函数有一些什么?为你呈现最全函数大全

    大家双节快乐呀~国庆节过去了一半,大家放了几天假呀?玩的开心吗? 如果假日没有其他安排,不要宅在家虚度光阴哦~看看我的文章或者视频学习一些知识吧~   今天为大家分享C语言库函数知识. 以下图片以字母 ...

  2. 学Python,只有不到15%的同学会成功

    我给大家唱首歌:<坚持的意义> 你看过了许多书籍 你看过了许多视频 你迷失在屏幕上每一道短暂的光阴 你品尝了代码的糟心 你踏过算法的荆棘 你熟记书本里每一段你最爱的公式 却说不出你爱Pyt ...

  3. 图解连接阿里云(一)创建阿里云物联网平台产品和设备,使用MQTT.fx快速体验

    1.  打开 https://www.aliyun.com/  注册账号 2.注册账号登录后点击控制台 3. 在下图1处输入物联网平台,会弹出2处所示物联网平台的入口,点击红色箭头所示处,进入物联网平 ...

  4. Python超全干货:【二叉树】基础知识大全

    概念 二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree) 二叉树的链式存储: ...

  5. 在之前的EventHandler中的参数类型必须继承EventArgs,现在已经去掉这个约束了。

    分别是vs2008和vs2012的对比,可以看到2012已经去掉了约束条件.

  6. C++编程指南续(4-5)

    五.常量 常量是一种标识符,它的值在运行期间恒定不变.C语言用 #define来定义常量(称为宏常量).C++ 语言除了 #define外还可以用const来定义常量(称为const常量). 5.1  ...

  7. 区块链学习1:Merkle树(默克尔树)和Merkle根

    ☞ ░ 前往老猿Python博文目录 ░ 一.简介 默克尔树(Merkle tree,MT)又翻译为梅克尔树,是一种哈希二叉树,树的根就是Merkle根. 关于Merkle树老猿推荐大家阅读<M ...

  8. 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解

    第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一.    引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...

  9. tcp socket学习

    更新一波学的socket编程,socket还是比较重要的,探测端口,连接服务底层都是socket编程.tcp有server 和 client.client和udp发送差不多. server端是建立了两 ...

  10. Springboot集成xxl-Job

    一.前言 xxl-job一个轻量级的分布的调度中间件,详情介绍自己到官网看:https://www.xuxueli.com/xxl-job/ 二.客户端(执行器) 引入依赖compile group: ...