目录

  • 一、消息队列的概述
    • (一)前置知识点
      • 1、集群和分布式
      • 2、队列(Queue)的含义
      • 3、同步与异步的含义
    • (二)消息队列的含义与特点
  • 二、Kafka
    • (一) 概述
    • (二) 常用名词含义
  • 导航栏

一、消息队列的概述

(一)前置知识点

1、集群和分布式

  • 集群:同一业务部署在多台服务器上或者不同的服务节点上。
  • 分布式:一个业务被拆分为多个子业务部署在不同的服务器上或者不同的服务节点上。

[举个例子]:汽车部件有轮子,发动机等。有生产轮子的车间,生产发动机的车间。同时,生产发动机的车间又有多个生产小组。那么汽车各种部件的生产车间就构成了分布式;生产发动机的车间里的多个生产小组构成了集群

2、队列(Queue)的含义

首先队列是一种数据结构,是一种特殊的线性表,其特点是先进先出。允许插入的一端称为队尾,允许删除的一端称为队头。图片如下:

3、同步与异步的含义

  • 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。
  • 异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。而,异步方法通常会在另外一个线程中,“真实”地执行着。整个过程,不会阻碍调用者的工作。

(二)消息队列的含义与特点

消息队列,一般我们会简称它为MQ(Message Queue),也叫消息中间件,是分布式系统中重要的组件,主要解决应用解耦异步消息,流量削峰等问题,目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。

下面谈谈个人对其特点的理解:

  • 解耦:假设系统A(A)是个用户管理系统,外界系统需要使用到系统A中的用户身份信息,便于其他系统使用。现在有系统B(B),系统C(C)需要用到A的用户信息,所以可能需要A在新增用户后将新增用户的信息以接口调用的方式发送给B和C。如果哪天B和C的接口发生改变,这样就导致了A需要同步修改调用接口。B和C要是出现用户匹配不上,可能还需要A来辅助帮忙排查问题。系统之间的耦合度是非常高的。所以,引入消息队列后,A只需要将新增用户信息放到消息队列中,其他不需要问了。B和C只要监听对应的主题,去取就好了。要是B和C遇到相关用户关联不上的问题,那只需要排查到消息队列有没有对应的消息就可以了。从此之后,系统A中的小伙伴们能省不少时间去划水摸鱼了。

  • 异步:还拿上面的例子来说,当系统A录入一个新的用户时,是需要同步发送系统B和系统C的,是一个线性操作。发送C之前需要发送给B,然后得到B的响应后才能发送给C。所以C收到时间会和B挂钩,然而B和C是完全不相干的系统,这样对C是不是不公平。但是当A将新增用户直接扔到MQ里面,B和C两个都能同时取到。这样大家都好,就很nice。

  • 削峰:换个例子,比如PDD电商平台0元抢购最新苹果手机(限量一台)活动时,有订单系统A。假设系统A中集群(假设三台物理机)的每台机器最大并发只支持1000的request,负载均衡后,系统A最大支持3000的并发量了。好家伙,遇到便宜傻子才不占。一下有10000个请求同一时间过来了。系统A只能处理3000条,多出来的7000条请求承受不了(liao)了(le),然后,系统A凉凉,这10000个人手机上就显示了[系统异常,请稍后重试!]。还抢购个鸡毛啊,he tui 。但是系统A加入消息队列后,请求发送到MQ中,系统A可以按照每秒3000去处理,也可以按照每秒2000去处理。嗯,先到先得,有一个人抢到了。9999人收到了消息[抱歉,没有抢到哦,充值VIP可以增加抢购概率哦],然后就有傻子去充会员了。

引用知乎的一个回答帮助大家更好理解什么是解耦、异步、削峰的概念:点击此处跳转

二、Kafka

(一) 概述

Kafka是一个分布式系统,由通过高性能TCP网络协议进行通信的服务器和客户端组成。它可以部署在内部以及云环境中的裸机硬件,虚拟机和容器上。

在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算。

  • Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。
  • Kafka最初是由LinkedIn公司开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。
  • Kafka是一个分布式消息队列。Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外 kafka集群有多个kafka实例组成,每个实例(server)称为broker。
  • 无论是kafka集群,还是consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性。

APACHE KAFKA官网

(二) 常用名词含义

消息处理过程:消息由producer产生,消息按照topic归类,并发送到broker中,broker中保存了一个或多个topic的消息,consumer通过订阅一组topic的消息,通过持续的pull操作从broker获取消息,并进行后续的消息处理。

名词 解释
Producer 消息的生成者
Consumer 消息的消费者
ConsumerGroup 消费者组,可以并行消费Topic中的partition的消息
Broker 缓存代理,Kafka集群中的一台或多台服务器统称broker
Topic Kafka处理资源的消息源(feeds of messages)的不同分类
Partition Topic物理上的分组,一个topic可以分为多个partion,每个partion是一个有序的队列。partion中每条消息都会被分配一个 有序的Id(offset)
Offset 偏移量,消费者在消费消息时,对应topic其中的一个分区partition的读取位置,可以理解为指针。
Message 消息,是通信的基本单位,每个producer可以向一个topic(主题)发布一些消息
Producers 消息和数据生成者,向Kafka的一个topic发布消息的 过程叫做producers
Consumers 消息和数据的消费者,订阅topic并处理其发布的消费过程叫做consumers

导航栏

Kafka学习笔记(二):Zookeeper 在 Kafka 中的作用
Kafka学习笔记(三):Kafka和其他常见消息队列的对比
Kafka学习笔记(四):在Ubuntu18.04上搭建kafka的环境
Kafka学习笔记(五):kafka的常用命令及工具KafkaTool学习
Kafka学习笔记(六):Kafka集成在SpringBoot2.x项目中

Kafka学习笔记(一):什么是消息队列?什么是Kafka?相关推荐

  1. Windows消息机制学习笔记(一)—— 消息队列

    Windows消息机制学习笔记(一)-- 消息队列 基本概念 实验一:使用代码画出最简单窗口 第一步:编译并运行以下代码 第二步:查看运行结果 第三步:使用其它窗口对其进行覆盖,观察效果 总结 消息队 ...

  2. 学习笔记(二) 消息队列

    学习了新的知识,记录一下,以下均为个人理解. 消息队列 我们为什么要使用消息队列,消息队列有什么好处呢? 在现实生活中,一个操作往往会引起系统的一系列反应,但这些反应有的可能并不是我需要去关心的核心操 ...

  3. win 32学习笔记(三) 消息队列

    抓取消息: GetMessage:从系统获取消息,将消息从系统中移除,阻塞函数.当系统无消息时,会等候下一条消息. PeekMessage:以查看的方式从系统获取消息,可以不将消息从系统移除,非阻塞函 ...

  4. 大数据 -- kafka学习笔记:知识点整理(部分转载)

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

  5. Windows消息机制学习笔记(三)—— 消息的接收与分发

    Windows消息机制学习笔记(三)-- 消息的接收与分发 要点回顾 消息循环 消息队列 消息的接收 GetMessage 实验1:理解GetMessage 第一步:编译并运行程序A 第二步:编译并运 ...

  6. Kafka学习笔记(3)----Kafka的数据复制(Replica)与Failover

    1. CAP理论 1.1 Cosistency(一致性) 通过某个节点的写操作结果对后面通过其他节点的读操作可见. 如果更新数据后,并发访问的情况下可立即感知该更新,称为强一致性 如果允许之后部分或全 ...

  7. 后端技术:消息队列MQ/JMS/Kafka相关知识介绍

    ?今天给大家分享消息队列MQ/JMS/Kafka相关知识介绍 1.消息队列介绍 首先举个收快递的栗子,传统的收快递,快递小哥把我们的快递送到我们的手里.他需要什么条件嗯? 快递小哥有时间送, 我们有时 ...

  8. SpringCloud笔记(四)消息队列

    消息队列 经过前面的学习,我们已经了解了我们之前的技术在分布式环境下的应用,接着我们来看最后一章的内容. 那么,什么是消息队列呢? 我们之前如果需要进行远程调用,那么一般可以通过发送HTTP请求来完成 ...

  9. ActiveMQ学习总结(8)——消息队列设计精要

    2019独角兽企业重金招聘Python工程师标准>>> 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步R ...

最新文章

  1. 十一、练习:爬取图虫网付费图片
  2. ICCV 2019 | 通过多标签相关性研究提升神经网络视频分类能力
  3. android list 比较,LinkedList 和 ArrayList 的区别
  4. linux下 c语言 用write open二进制写文件,Linux下用C语言fopen、fread和fwrite函数对二进制文件的操作-Go语言中文社区...
  5. julia自然常数_Julia中的Sys.KERNEL常数
  6. java和asp.net core,VS 2019教程:创建ASP.NET Core Web App
  7. 【计算机就业-算法工程师】校招想去互联网公司担任算法工程师该怎么准备
  8. lubridate | 日期类型数据的转换
  9. oracle awr报告生成_5.性能测试 - Oracle体系结构和性能优化简介
  10. spring boot开发环境搭建
  11. jQuery 左侧滑动
  12. Sublime Text 3下载-汉化-插件配置
  13. 农业银行网银证书的控件被阻止的解…
  14. 如何彻底卸载AutoCAD 2018版
  15. 【C++】error: passing ‘const xxx’ as ‘this’ argument discards qualifiers [-fpermissive]
  16. linux安装Ice3.7 c++
  17. 一种可调电子负载电路/可调恒流源电路
  18. 网络安全[脚本小子] -- SSI注入
  19. 清华大学计算机研究生课程表
  20. 计算机bios无法进入,启动系统后无法进入BIOS怎么办

热门文章

  1. linux程序测试工具gprof,Linux下gprof和oprofiling性能测试工具
  2. Unity设计模式之单例模式
  3. mysql如何修改所有列名_mysql批量修改字段名(列名)
  4. POJ 1568 四子棋 搜索剪枝
  5. 雄兔脚扑朔,雌兔眼迷离;双兔傍地走,安能辨我是雄雌?——golang接口的概念
  6. Android手机音量设置相关
  7. Codeforces edu C. Robot in a Hallway
  8. python谁是卧底、猜词语
  9. 父亲母亲-给母亲唱一首歌
  10. Python 类型转换(数据类型转换函数大全)