前言:老刘今天写这篇文章首先想对一些复制粘贴的博客表达不满;其次是想用通俗易懂的话解释消息系统;最后欢迎各位英雄好汉、女中豪杰前来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. How tomcat works(深入剖析tomcat)生命周期Lifecycle

    How Tomcat Works (6)生命周期Lifecycle 总体概述 这一章讲的是tomcat的组件之一,LifeCycle组件,通过这个组件可以统一管理其他组件,可以达到统一启动/关闭组件的 ...

  2. gitlab 文件读取+rce复现 CVE202010977

    文件读取实现,首先生成两个project 再任意一个project添加issue,然后描述如下: ![a](/uploads/11111111111111111111111111111111/../. ...

  3. 汇编中的inc和dec

    原文链接:https://www.cnblogs.com/whzym111/p/6370198.htmlinc 加1指令 dec 减1指令 一.加一指令inc inc a 相当于 add a,1 // ...

  4. JZOJ【NOIP2013模拟联考14】隐藏指令

    JZOJ[NOIP2013模拟联考14]隐藏指令 题目 Description 在d维欧几里得空间中,指令是一个长度为2N的串.串的每一个元素为d个正交基的方向及反方向之一.例如,d = 1时(数轴) ...

  5. Feign 自定义 ErrorDecoder (捕获 Feign 服务端异常)

    问题描述 Feign 客户端捕获不到服务端抛出的异常 问题解决 重新 ErrorDecoder 即可,比如下面例子中在登录鉴权时想使用认证服务器抛出 OAuth2Exception 的异常,代码如下: ...

  6. Cys_Control(四) MTabControl

    一.查看TabControl原样式 <ControlTemplate TargetType="{x:Type TabControl}"> <Grid x:Name ...

  7. redis的配置文件redis.conf常用配置

    参数说明redis.conf 配置项说明如下:1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no2. 当Redis以守护进程方式运行时 ...

  8. OpenCV-Python setMouseCallback回调函数中图像变量img的传递方法解析

    ☞ ░ 前往老猿Python博文目录 ░ 一.使用全局变量进行变量传递 OpenCV-Python中可以使用setMouseCallback来设置鼠标事件的回调函数,我们来看个样例. 1.1.案例1代 ...

  9. Oracle函数使用1

    一.字符串处理函数 1.ascii(x):返回字符的ASCII. SQL语句:select ascii('a') from dual; dual:空表,每创建一个用户都会生成这样一个dual表,表中只 ...

  10. 定位方式 及CSS高级技巧

    定位 background-position 背景位置 浮动,在一个浮字上面,我们的定位,在一个位上.CSS离不开定位,特别是后面的JS特效,天天和定位打交道. 为什么要使用定位? 元素的定位属性 元 ...