首页 > 其他分享 >聊聊消息中间件

聊聊消息中间件

时间:2024-04-09 22:25:08浏览次数:26  
标签:消费者 中间件 Topic 集群 消息 聊聊 消息中间件

消息中间件,广泛应用于分布式系统的架构设计之中。一提到业务解耦、流量削峰的技术选型,很容易就想到,是时候该消息中间件上场了。

我想聊聊两个问题。

消息中间件从设计来讲,应该有哪些组件?

消息中间件的使用中,常碰到的问题有哪些?又该如何解决?

消息中间件的设计架构

消息中间件的架构,在我看来,应该分解为三个方面:功能模块、高可用、极致性能。

从功能模块的角度讲,目前主流有两种模式:队列模式、订阅模式。

比如rabbitMq,就只支持队列模式;而RocketMq、Kafka,则支持订阅模式。我重点以订阅模式来聊聊。

消息中间件的职责,就是收消息、发消息,这个过程中,有两个难点。

一是多消费者时,如何保证每个消费者都能收到消息?

二是单消费者如果是集群节点,如何让集群的优势得以最大发挥?

以RocketMq为例,就有  Broker、Topic、Queue、Consumer Group  四个角色。

Broker,顾名思义,就是中间件的角色。

Topic,则是一个订阅主题。

Consumer Group:表示消费组,不同消费组,可以消费同一个Topic。同一个消费组,对同一个Topic则是互斥的关系。

Queue:队列,主要目的是保证能并发发送消息给消费者集群。如果没有Queue,由于要保证消息的顺序以及确认消息发送成功,就必须

每发一个消息,并等待消费者返回成功后,才能再发送下一个消息。这就会导致消费者集群形同虚设。

再从高可用的角度来讲,首先最容易想到的方案,就是集群。

对,当然要做集群,但是数据如何治理?是每个节点都保存全量数据,还是做数据切片呢?

目前主流的消息中间件,都没有采用数据切片的方案。主要原因便是实现难度过大。要知道,实现一个好的分布式原生数据系统,难度是

很大的。

极致性能:具体中间件都做了很多性能上的优化。比如Kafka的零拷贝等。

常见问题及解决思路

在使用消息中间件的过程中,我相信你一定碰到过下面这些问题。

消息积压:

这个问题,一般有如下原因。

1. 消费者端消费能力下降。  比如消费端操作的数据库出了问题,比如消费端系统CPU彪高或者内存溢出。只需要对症下药解决即可。

2. 生产者端消息突然增多。  比如突然某个原因发了大量消息,比如业务高峰期出现流量洪峰。 针对这类问题,要么紧急削减消息量,

                                             要么水平扩展消费者集群的数量。

 

消息丢失:

生产者端消息丢失:  生产者可以通过确保消息发送成功来避免。

中间件消息丢失:      通过配置集群,以及数据持久化,可以避免这个问题。

消费者端消息丢失:  保证业务做完后,再返回中间件成功,可以避免这个问题。

 

中间件消息事务:

Kafka提供了接口,需要写实现代码。RocketMq有现成的机制,能保证消息的事务性。

标签:消费者,中间件,Topic,集群,消息,聊聊,消息中间件
From: https://www.cnblogs.com/kingcode/p/18124982

相关文章

  • 聊聊ChatGLM3多用户并发API调用的问题
    转载请备注出处:https://www.cnblogs.com/zhiyong-ITNote背景目前在公司内部4张A10的GPU服务器上部署了ChatGLM3开源模型;然后部署了官方默认的web_demo、api_demo两种模式;重新设计了前端,支持H5和安卓两个客户端调用。但却发现了不能并发访问的问题。问题现象在安卓与H5同时调......
  • 聊聊公众号最让我不爽的两个痛点
    本文首发于Python猫微信公众号最让我不爽的地方有两个,而且有很多人虽然也不爽,却不知道原因。本文想聊聊公众号的两个痛点,因为我经常收到私信问这两个问题,本文算是一次集中的回复吧。第一个不爽的点是公众号会屏蔽外链,导致无法正常跳转文字链接。这是什么意思呢?其实就是说在公......
  • 发布版本?构建版本?聊聊持续交付中的版本号的设计和管理
    在研发过程中,大家都知道"版本",但是不同的人对"版本"的理解是不同的。大家都知道很重要,但是往往容易被忽视,特别是在持续交付过程中,笔者认为相当重要。因为只要有变更,就会有版本控制,随之而来就是版本号设计,以及不同阶段如何使用版本号。不同角色对“版本”的理解产品经理、客户......
  • 上海天翼云代理商:分布式消息服务Kafka高吞吐、高可用的消息中间件服务
    上海天翼云代理商:分布式消息服务Kafka高吞吐、高可用的消息中间件服务简介:飞机@luotuoemo本文由(天翼云代理商:【金推云】www.jintui.cn)撰写天翼云:领航分布式消息服务的行业先锋在当前的大数据时代,如何有效地处理和管理海量数据已成为企业的关键挑战之一。这里,我们要引入一......
  • 万字长文,聊聊我在京东锦礼成长的这一年
    “学而不思则罔,思而不学则殆”,本文记录了作者在京东锦礼侧工作1年间遇到的思考与成长、挑战与困难,也是对过去工作的总结与反思,分享出来,希望对大家有所帮助。后续作者还将分享在京东做技术的详细经历,可持续关注。1.引言光阴似箭,来到锦礼产品线已满一年了,这期间深刻地了解到......
  • 聊聊测试计划
    测试计划的定义:特意度娘了一下,测试计划的注释:测试计划Testingplan,描述了要进行的测试活动的范围、方法、资源和进度的文档;是对整个信息系统应用软件组装测试和确认测试。 它确定测试项、被测特性、测试任务、谁执行任务、各种可能的风险。测试计划可以有效预防计划的风险,保......
  • C#中的消息中间件(RabbitMQ 和 Redis)
    消息中间件是一种用于在分布式系统中进行异步通信的技术,常用于解耦应用程序的不同组件、实现消息传递、提高系统的可伸缩性和可靠性等。以下是关于消息中间件的知识点以及可能会在面试中被问到的一些问题和答案:消息中间件的知识点:消息队列(MessageQueue):消息中间件通常基于消......
  • 聊聊vue中的vue中的slot与slot-scope
    前言:vue中关于插槽的文档说明很短,语言又写的很凝练,再加上其和methods,data,computed等常用选项使用频率、使用先后上的差别,这就有可能造成初次接触插槽的开发者容易产生“算了吧,回头再学,反正已经可以写基础组件了”,于是就关闭了vue说明文档。实际上,插槽的概念很简单,下面......
  • 聊聊 Java GC
    [1]序GC是每一个Java程序员不可绕过的话题。GC是在某些时候对内存的垃圾对象数据进行搜寻定位,然后进行内存空间回收。根据这个定义,则学习GC相关知识,需要关注:对JVM整个内存结构中哪些区域进行垃圾回收;在这些内存区域中的类数据或者实例数据等数据结构是什么样子的;然后想想如......
  • vivo 消息中间件测试环境项目多版本实践
    作者:vivo互联网中间件团队-LiuTao在开源RocketMQ基础之上,关于【测试环境项目多版本隔离】业务诉求的落地与实践。一、背景在2022年8月份vivo互联网中间件团队完成了互联网在线业务的MQ引擎升级,从RabbitMQ到RocketMQ的平滑升级替换。在业务使用消息中间件的过程中......