rabbitMQ-kafka+mq作用目的

rabbitMQ-kafka+mq作用目的目录 rocketMq 架构 mq 作用消息幂等性判断 mq 消息积压 mq 消息过期 rabbitMq 优点缺点消息重复消费丢失数据 1 生产者丢数据 rabbitMqkafk mq 丢数据 rabbitMqkafk 消费者丢数据 rabbitMqKafk 顺序消费 rabbitMqkafk 架构 NameServer 是一个几乎无状态节点 可集群部署 在消息队列 RocketMQ 版中提供命名服务

目录

rocketMq架构 

mq作用

消息幂等性判断

mq消息积压

mq消息过期

rabbitMq 

优点

缺点

消息重复消费

丢失数据

1. 生产者丢数据

rabbitMq

kafka

2. mq丢数据

rabbitMq

kafka

3. 消费者丢数据 

rabbitMq

Kafka

顺序消费

rabbitMq

kafka


 

rocketMq架构 

rabbitMQ-kafka+mq作用目的

  • Name Server:是一个几乎无状态节点,可集群部署,在消息队列RocketMQ版中提供命名服务,更新和发现Broker服务。
  • Broker:消息中转角色,负责存储消息,转发消息。分为Master Broker和Slave Broker,一个Master Broker可以对应多个Slave Broker,但是一个Slave Broker只能对应一个Master Broker。Broker启动后需要完成一次将自己注册至Name Server的操作;随后每隔30s定期向Name Server上报Topic路由信息。
  • 生产者:与Name Server集群中的其中一个节点(随机)建立长连接(Keep-alive),定期从Name Server读取Topic路由信息,并向提供Topic服务的Master Broker建立长连接,且定时向Master Broker发送心跳。
  • 消费者:与Name Server集群中的其中一个节点(随机)建立长连接,定期从Name Server拉取Topic路由信息,并向提供Topic服务的Master Broker、Slave Broker建立长连接,且定时向Master Broker、Slave Broker发送心跳。Consumer既可以从Master Broker订阅消息,也可以从Slave Broker订阅消息,订阅规则由Broker配置决定。

nameServer,类似于一个 注册中心,broker进行注册,汇报自身信息,消费者、生产者与namerServer建立长连接,获取topic信息,然后去broker上进行数据操作。

mq作用

消息幂等性判断

mq消息积压

mq消息过期

批量重导,在流量低的时候,通过临时程序,将数据从数据库查询出来,然后重新灌入到mq

rabbitMq 

集群模式

优点

任何一个机器宕机了,没事儿,其它机器(节点)还包含了这个 queue 的完整数据,别的 consumer 都可以到其它节点上去消费数据。

缺点

第一,这个性能开销也太大了吧,消息需要同步到所有机器上,导致网络带宽压力和消耗很重!

第二,这么玩儿,不是分布式的,就没有扩展性可言了,如果某个 queue 负载很重,你加机器,新增的机器也包含了这个 queue 的所有数据,并没有办法线性扩展你的 queue

rabbitMQ-kafka+mq作用目的

消息重复消费

rabbitMQ-kafka+mq作用目的

rabbitMQ-kafka+mq作用目的

丢失数据

rabbitMQ-kafka+mq作用目的

1. 生产者丢数据

rabbitMq

启动ack确认机制

确保说写 RabbitMQ 的消息别丢,可以开启 confirm 模式,在生产者那里设置开启 confirm 模式之后,你每次写的消息都会分配一个唯一的 id,然后如果写入了 RabbitMQ 中,RabbitMQ 会给你回传一个 ack 消息,告诉你说这个消息 ok 了。如果 RabbitMQ 没能处理这个消息,会回调你的一个 nack 接口,告诉你这个消息接收失败,你可以重试。而且你可以结合这个机制自己在内存里维护每个消息 id 的状态,如果超过一定时间还没接收到这个消息的回调,那么你可以重发

kafka

启用回调函数查看消息是否保存成功

失败重试机制

2. mq丢数据

rabbitMq

开启消息持久化

  • 创建 queue 的时候将其设置为持久化
    这样就可以保证 RabbitMQ 持久化 queue 的元数据,但是它是不会持久化 queue 里的数据的。
  • 第二个是发送消息的时候将消息的 deliveryMode 设置为 2
    就是将消息设置为持久化的,此时 RabbitMQ 就会将消息持久化到磁盘上去。

kafka

ack确认机制,kafka服务端配置,当所有的副本都同步完成之后,消息才保存成功,防止在leader宕机后,主从切换的时候,未同步的数据丢失,设置,ack=all或 -1 表示所有的副本同步完数据之后,消息才算保存成功

3. 消费者丢数据 

rabbitMq

关闭自动提交ack 

Kafka

关闭自动提交offset

顺序消费

rabbitMq

拆分多个 queue,每个 queue 一个 consumer,就是多一些 queue 而已,确实是麻烦点;

或者就一个 queue 但是对应一个 consumer,然后这个 consumer 内部用内存队列做排队,然后分发给底层不同的 worker 来处理。 

rabbitMQ-kafka+mq作用目的

kafka

写 N 个内存 queue,具有相同 key 的数据都到同一个内存 queue;然后对于 N 个线程,每个线程分别消费一个内存 queue 即可,这样就能保证顺序性。

rabbitMQ-kafka+mq作用目的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233235.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 初识ABP vNext(11):聚合根、仓储、领域服务、应用服务、Blob存储

    初识ABP vNext(11):聚合根、仓储、领域服务、应用服务、Blob存储

    2020年11月20日
    200
  • centos7.6开放端口命令_查看端口有没有开放

    centos7.6开放端口命令_查看端口有没有开放概要最近在docker下搭建MySQL和Redis环境,远程linux主机内部网络都走通了,但是就是外网无法连接远程服务器的MySQL和Redis。经过一番查找和学习,终于找到了问题,不仅远程服务器上docker要做好内部和外部端口的映射,关键还要对对外开放的端口添加到防火墙中。内容介绍的逻辑是:本篇文章先记录Centos7下查看防火墙状态和网络状态命令;下一篇将介绍通过docker…

    2022年9月1日
    6
  • axisfaultexception_this alias is not available

    axisfaultexception_this alias is not available出现下面情况,可以是proxy.setEndpoint(endpoint);中endpoint没有给对导致AxisFault faultCode:{http://xml.apache.org/axis/}Server.NoService faultSubcode: faultString:TheAXISenginecouldnotfindatargetservicetoinvoke! targetServiceisGetPassword1 faultActor

    2022年9月12日
    1
  • 戴尔服务器的远程开机和关机

    戴尔服务器的远程开机和关机手上有一台戴尔的DELLPowerEdgeR210服务器,闲来无事,研究了一下它的远程开机和关机。Dell的服务器默认都带BMC,这个用来做管理的网口和操作系统是共用的同一个网口(注意必需是第一个网口,即服务器上标有1的那个),只要BMC里设置的IP地址和操作系统的IP不一样就可以了。BMC的设置很简单,按以下步骤进行设置:1、在服务器启动时看到Press<Ct…

    2022年5月16日
    59
  • C# Grid StackPanel DockPanel WrapPanel

    C# Grid StackPanel DockPanel WrapPanelWPF面板布局介绍Grid、StackPanel、DockPanel、WrapPanel回顾       上一篇,我们介绍了基本控件及控件的重要属性和用法,我们本篇详细介绍WPF中的几种布局容器及每种布局容器的使用场景,当然这些都是本人在实际项目中的使用经验,可能还存在错误之处,还请大家指出。本文大纲1、Grid2、StackPanel3、DockPanel…

    2022年7月23日
    7
  • 桌面太单调?一起用Python做个自定义动画挂件,好玩又有趣!「建议收藏」

    桌面太单调?一起用Python做个自定义动画挂件,好玩又有趣!「建议收藏」前言前段时间,写了篇博客关于Python自制一款炫酷音乐播放器。有粉丝问我,音乐播放器为什么要用PyQt5,效果是不是比Tkinter赞?PyQt5真的可以实现这些炫酷的UI画面吗?之前没接触过PyQt5,能不能多分享一些这方面的开发案例?今天就带大家,一起用Python的PyQt5开发一个有趣的自定义桌面动画挂件,看看实现的动画挂件效果!下面,我们开始介绍这个自定义桌面动画挂件的制作过程。一、核心功能设计总体来说,我们需要实现将自己喜欢的动态图gif或者视频转成一个桌面动画挂件,并且可以通过鼠

    2022年4月25日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号