Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >消息系统概述

消息系统概述

作者头像
草捏子
发布于 2020-08-11 03:03:53
发布于 2020-08-11 03:03:53
8500
举报
文章被收录于专栏:草捏子草捏子
草捏子最近开始学习Kafka。在学习前,给自己确定了下学习的范围,大致如下:
  1. 理解Kafka的相关概念;
  2. 掌握Kafka的基本API使用;
  3. 了解Kafka的背后原理。

后续将在这学习范围内输出一些相关文章。那么本文作为Kafka系列的第一篇文章,将从“理解Kafka的相关概念”说起。首先Kafka是什么。

Kafka起初是由LinkedIn公司采用Scala语言开发的一个多分区、多副本且基于ZooKeeper协调的分布式消息系统,现已被捐献给Apache基金会。目前Kafka已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。

从上述介绍中,我们可以知道Kafka具有消息系统流式处理平台两种角色。为了更好的理解Kafka,本文将对消息系统进行介绍。

消息系统

消息系统,又被称作消息中间件。现在听到较多的是消息队列(MQ)的叫法,算是消息中间件的一种简称,其实都是同样的意思。那么消息系统是什么。

看一个我们都熟悉的场景——电子邮件。我们发送电子邮件,实际上就是将一个邮件文件从我们的电脑转发到对方电脑上,但是我们在发送的时候,并不需要关心对方的电脑是否开着,只管发送就好,邮件会先被发送到邮件服务器上,然后当对方电脑开机时,再从邮件服务器上获取邮件。邮件服务器就是一个消息系统,可暂存应用之间通信所发送的消息。而这样能带来的好处也显而易见了,作为发送消息的生产者并不需要关心接收消息的消费者的状态,生产者只需确保将消息成功发送到消息系统即可,这是一种异步通信模式。

这种通信模式起到了解耦的作用,减少了生产者的职责。生产者只需关注生产消息和把消息发送到消息系统,而消费情况无需关注。

不仅如此,除上述我们描述的点对点(单消费者)情况,我们还可以在生产者无感知的情况下,使用发布/订阅模式。加入的新消费者去订阅主题,然后由消息系统广播给所有订阅的消费者,这为系统的扩展提供了便利。

而且通过异步能加快系统的响应。例如一个下单操作,需要涉及优惠券、积分和短信等系统的处理,如果使用同步则需要等所有系统都处理完,但这样下单系统的响应时间将大大增加。通过使用消息系统,下单系统只需将下单操作的消息写入,然后完成下单操作,响应给用户。至于优惠券、积分、短信等将由相应系统从消息系统中获取下单操作消息进行处理。

我们再试想下这样的场景,当下单系统接收的请求突增的时候,消息系统也能起到削峰/限流的作用,暂存消息,让下游系统根据自身处理能力来处理消息,避免下游系统崩溃,系统也将更为稳定。

关注的问题

通过上述的介绍,对消息系统有了一定的认识。下面我们再进一步的思考下,消息系统的功能我们已经知道了,如果让我们使用一个消息系统,需要关注哪些问题,以下是我所想到的一些:

  1. 可用性。如果消息系统挂了,那消费的下游系统都将失效,所以需要保证可用性。
  2. 吞吐量。如果上游系统每秒百万级的吞吐量,需要让消息系统的写入吞吐量与其匹配。同时也需关注下游系统消费情况的吞吐量。
  3. 消息丢失。上游系统->消息系统->下游系统,这两个过程都有可能发生消息丢失。
  4. 消息顺序。这个问题其实和消息丢失是同时存在的,由于消息的丢失,将造成消息顺序的错乱。

在后续的学习中,将带着这几个问题,去看看Kafka是如何解决。

参考

  1. 《深入理解Kafka核心设计与实践原理》
  2. 消息队列的使用场景(https://www.zhihu.com/question/34243607/answer/1023686807)
  3. 什么是消息队列(https://juejin.im/post/6844903817348136968)
  4. 消息队列设计精要 (https://tech.meituan.com/2016/07/01/mq-design.html)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 草捏子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
看完这篇,MQ面试大厂稳了!
最近这年头,面试找工作不问点中间件相关知识好像说不过去,而面试考察最多的中间件就是缓存数据库Redis和消息中间件MQ。
测试小牛
2023/09/01
4360
看完这篇,MQ面试大厂稳了!
消息队列的 6 种经典使用场景和 Kafka 架构设计原理详细解析
我是码哥,可以叫我靓仔。今天来聊一聊 Kafka 消息队列的使用场景和核心架构实现原理,帮助你全面了解 Kafka 其内部工作原理和设计理念。。
码哥字节
2024/05/28
2.7K0
消息队列的 6 种经典使用场景和 Kafka 架构设计原理详细解析
Java消息队列总结只需一篇ActiveMQ、RabbitMQ、ZeroMQ、Kafka
消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
慕容千语
2019/06/06
1K0
Java消息队列总结只需一篇ActiveMQ、RabbitMQ、ZeroMQ、Kafka
消息队列经典十连问
大家好呀,我是捡田螺的小男孩。金三银四即将来临,整理了十道十分经典的消息队列面试题,看完肯定对面试有帮助的,大家一起加油哈~
捡田螺的小男孩
2022/04/06
8300
消息队列经典十连问
消息队列消息延迟解决方案,跟着做就行了
前面我们讲到了使用消息队列解决了我们电商系统的各种问题,削峰填谷、异步处理以及系统间解耦合,同时也对其重复消息问题进行了详细方案讲解(你的消息队列如何保证消息不丢失,且只被消费一次,这篇就教会你,秒杀系统每秒上万次下单请求,我们该怎么去设计)。那我们在消息队列的使用过程中还有没有需要注意的地方呢?
架构师修炼
2020/07/20
1.5K0
消息队列消息延迟解决方案,跟着做就行了
谈谈你对MQ(消息中间件)的理解
昨天,有位56年工作经验的粉丝面试被问到,什么是消息中间件。平时只关注使用,并没有去总结过,竟然被这个问题住了。今天,我给大家来聊一聊。
Tom弹架构
2022/08/22
1.6K0
谈谈你对MQ(消息中间件)的理解
硬卷消息中间件系列(一):RabbitMQ 入门(核心概念与架构)
在这之前,我们相继卷完了:关系型数据库 MySQL 、 NoSQL 数据库 Redis 、 MongoDB 、搜索引擎 ElasticSearch 、大数据 Hadoop框架、PostgreSQL 数据库、消息中间件 Kafka、分布式协调中间件 Zookeeper 这些系列的知识体系。今天开始,我们将踏上另一个中间件学习之路:RabbitMQ!
民工哥
2023/09/09
2.2K0
硬卷消息中间件系列(一):RabbitMQ 入门(核心概念与架构)
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day31】—— 消息队列1
  本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux操作技巧等。
陈哈哈
2021/12/31
3290
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day31】—— 消息队列1
【百面成神】消息中间件基础7问,你能撑到第几问
其实就是一个以队列作为消息通信的组件,本质上是一个消息转发器。可以对消息进行接收、存储和消费。当前业界比较流行的消息中间件有rabbitmq,rocketmq和Kafka。我用的比较多的是rabbitmq。
半旧518
2023/10/17
4020
【百面成神】消息中间件基础7问,你能撑到第几问
如何选择合适的消息队列中间件
 在选择消息中间件的时候我们要先明确,消息队列中间件的作用。其实也就是削峰填谷和异步解耦
ma布
2024/12/25
1780
如何选择合适的消息队列中间件
消息队列使用的四种场景介绍
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题
李海彬
2018/07/26
9410
消息队列使用的四种场景介绍
消息队列:听我解释,我真的不是只有Kafka!
导语 | 消息队列也通常称为消息中间件,提到消息队列,大部分互联网人或多或少都听过该名词。对于后端工程师而言,更是日常开发中必备的一项技能。随着大数据时代的到来,apache旗下的Kafka一度成为消息队列的代名词,提起消息队列大家自然而然就想到了Kafka。然而消息队列本身是工程领域内一种解决问题的通用方案。它的背后有着一些通用的设计思想和经典模型,这些是消息队列的精髓和灵魂。它们独立于任何一种消息队列的具体实现(例如Kafka),但每种消息队列(除了Kafka外,还有RocketMQ、Pulsar
腾讯云开发者
2021/08/23
4130
消息队列Kafka - 应用场景分析
一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
conanma
2022/04/07
9670
消息队列杂谈
本篇文章聊聊消息队列相关的东西,内容局限于我们为什么要用消息队列,消息队列究竟解决了什么问题,消息队列的选型。
SH的全栈笔记
2022/08/17
3890
消息队列杂谈
消息队列(RabbitMQ)(入门)
举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订单超过一万后不允许用户下单。使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好。
cheese
2023/10/25
2.6K0
消息队列(RabbitMQ)(入门)
探索 RocketMQ:企业级消息中间件的选择与应用
RocketMQ 是一个高性能、高可靠、可扩展的分布式消息中间件,它是由阿里巴巴开发并贡献给 Apache 软件基金会的一个开源项目。RocketMQ 主要用于处理大规模、高吞吐量、低延迟的消息传递,它是一个轻量级的、功能强大的消息队列系统,广泛应用于金融、电商、日志系统、数据分析等领域。
用户7954602
2024/11/23
2080
探索 RocketMQ:企业级消息中间件的选择与应用
消息队列背后的设计思想
消息队列:它主要用来暂存生产者生产的消息,供后续其他消费者来消费。它的功能主要有两个:a.暂存(存储)、b.队列(有序:先进先出)。其他大部分场景对数据的消费没有顺序要求,主要用它的暂存能力 。从目前互联网应用中使用消息队列的场景来看,主要有以下三个: 1. 异步处理数据 2. 系统应用解耦 3. 业务流量削峰
jaydenwen123
2021/08/18
1.1K0
消息队列背后的设计思想
最详解消息队列以及RabbbitMQ之HelloWorld
对消息队列进行技术选型时,需要通过以下指标衡量你所选择的消息队列,是否可以满足你的需求:
小熊学Java
2022/09/04
6110
IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列
消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一。
JackJiang
2018/09/26
3.8K0
浅谈消息队列及常见的分布式消息队列中间件
分布式消息队列中间件是是大型分布式系统不可缺少的中间件,通过消息队列,应用程序可以在不知道彼此位置的情况下独立处理消息,或者在处理消息前不需要等待接收此消息。所以消息队列主要解决应用耦合、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构。消息队列已经逐渐成为企业应用系统内部通信的核心手段,当前使用较多的消息队列有 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ 等,而部分数据库如 Redis、MySQL 以及 PhxSQL 也可实现消息队列的功能。
BUG弄潮儿
2021/03/04
3.8K0
推荐阅读
相关推荐
看完这篇,MQ面试大厂稳了!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档