Kafka学习笔记(一):什么是消息队列?什么是Kafka?
目录
- 一、消息队列的概述
- (一)前置知识点
- 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?相关推荐
- Windows消息机制学习笔记(一)—— 消息队列
Windows消息机制学习笔记(一)-- 消息队列 基本概念 实验一:使用代码画出最简单窗口 第一步:编译并运行以下代码 第二步:查看运行结果 第三步:使用其它窗口对其进行覆盖,观察效果 总结 消息队 ...
- 学习笔记(二) 消息队列
学习了新的知识,记录一下,以下均为个人理解. 消息队列 我们为什么要使用消息队列,消息队列有什么好处呢? 在现实生活中,一个操作往往会引起系统的一系列反应,但这些反应有的可能并不是我需要去关心的核心操 ...
- win 32学习笔记(三) 消息队列
抓取消息: GetMessage:从系统获取消息,将消息从系统中移除,阻塞函数.当系统无消息时,会等候下一条消息. PeekMessage:以查看的方式从系统获取消息,可以不将消息从系统移除,非阻塞函 ...
- 大数据 -- kafka学习笔记:知识点整理(部分转载)
一 为什么需要消息系统 1.解耦 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许多 ...
- Windows消息机制学习笔记(三)—— 消息的接收与分发
Windows消息机制学习笔记(三)-- 消息的接收与分发 要点回顾 消息循环 消息队列 消息的接收 GetMessage 实验1:理解GetMessage 第一步:编译并运行程序A 第二步:编译并运 ...
- Kafka学习笔记(3)----Kafka的数据复制(Replica)与Failover
1. CAP理论 1.1 Cosistency(一致性) 通过某个节点的写操作结果对后面通过其他节点的读操作可见. 如果更新数据后,并发访问的情况下可立即感知该更新,称为强一致性 如果允许之后部分或全 ...
- 后端技术:消息队列MQ/JMS/Kafka相关知识介绍
?今天给大家分享消息队列MQ/JMS/Kafka相关知识介绍 1.消息队列介绍 首先举个收快递的栗子,传统的收快递,快递小哥把我们的快递送到我们的手里.他需要什么条件嗯? 快递小哥有时间送, 我们有时 ...
- SpringCloud笔记(四)消息队列
消息队列 经过前面的学习,我们已经了解了我们之前的技术在分布式环境下的应用,接着我们来看最后一章的内容. 那么,什么是消息队列呢? 我们之前如果需要进行远程调用,那么一般可以通过发送HTTP请求来完成 ...
- ActiveMQ学习总结(8)——消息队列设计精要
2019独角兽企业重金招聘Python工程师标准>>> 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步R ...
最新文章
- 调用API弹出打印机属性对话框
- CSDN开源夏令营 百度数据可视化实践 ECharts(8)
- tcpdump dns流量监控
- Openfire3.9.3源代码导入eclipse中开发配置指南
- IDA Pro 搜索中文字符串
- JDK中DNS缓存的分析
- P4719 【模板】“动态 DP“动态树分治(矩阵/轻重链剖分/ddp)
- python中主函数循环,带有菜单函数的Python主函数循环不起作用?
- php sphinx api调用,php调用Sphinx
- sq服务启动后又停止_SQL SERVER SQL Agent 服务启动后又停止的解决办法
- RocketMQ(六)—IndexFile详解
- cmd输入pip报错_安装虚拟环境+pip安装XXX包的常见操作与报错解决
- [linux/ unix] 查看占用端口的 进程ID 的区别
- 移动端点击一下显示再点一下消失_App用户自然流量裂变增长:移动互联网社交+深度链接技术的应用!...
- 数据库系统基础教程(原书第三版)课后答案汇总
- 为了冰箱贴的一次渗透测试
- 计算机怎么改鼠标标志,图文帮你如何自定义电脑鼠标指针的图标
- 校验子解码问题(Syndrome Decoding)
- windows变量环境
- Teredo tunneling pseudo-interface前面有个黄色感叹号