MQ之ZeroMQ、JZMQ、Kafka简介

MQ消息队列

参考链接:https://blog.csdn.net/zhoujiyu123/article/details/84843068?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-7.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-7.control

1.Mq的理念:(为什么用消息中间件)
是基础数据结构中“先进先出”的一种数据结构。
指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递——生产者产生消息并把消息放入队列,然后由消费者去处理。
消息队列中间件是分布式系统中重要的组件,实现高性能,高可用,可伸缩和最终一致性架构。
主要解决:

  1. 应用解耦
    链式调用导致都在等待前者完成,接口之间的耦合比较严重,需要重复修改接口,例如订单系统后需要同时更新库存、物流系统、支付系统等都需要修改接口。
    在这里插入图片描述
    在这里插入图片描述

一条消息有多个系统需要对应处理,只需要主业务完成以后,发送一条MQ,其余模块消费MQ消息,即可实现业务,降低模块之间的耦合。
2. 异步消息
主业务执行结束后从属业务通过MQ,异步执行,减低业务的响应时间,提高用户体验。
同步调用存在等待最长处理时间的那个业务的问题。
3. 流量削锋
高并发情况下,业务异步处理,提供高峰期业务处理能力,保护 主业务的目的。
在这里插入图片描述

在这里插入图片描述

2.落地产品消息中间件:
RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ等

3.消息中间件模式分类:

  • 点对点:
    消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息。
    消息被消费以后,queue中不再存储,所以消息消费者不可能消费到已经被消费的消息。
    在这里插入图片描述
  • 发布/订阅
    Pub/Sub发布订阅(广播):使用topic作为通信载体
    消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到topic的消息会被所有订阅者消费。

在这里插入图片描述

ZeroMQ(又名ØMQ,MQ,或zmq)

参考链接:
https://blog.csdn.net/lfsf802/article/details/38238007
http://holbrook.github.io/2013/07/03/zeromq_intro.html
https://www.cnblogs.com/cswuyg/p/5196587.html
https://blog.csdn.net/tjcwt2011/article/details/81542944
https://blog.csdn.net/qq_41453285/article/details/105984928	
https://blog.csdn.net/mysunshinexia01/article/details/80871696
https://www.cnblogs.com/leijiangtao/p/12016200.html

JZMQ

JZMQ是什​​么?
这是 libzmq(又名 ZeroMQ,0MQ)的 Java 语言绑定。

jzmq 是 ZeroMQ (libzmq)的 Java 版本,通过 JNI 实现以达到最高性能。
不过 ZeroMQ 也提供了纯 Java 实现的版本 —— JeroMQ。
**区别:**JZMQ 使用 JNI 包装 libzmq 以获得最佳性能。如果性能不是您的主要目标,请查看JeroMQ项目,它是一个纯 Java 实现,提供与 JZMQ 相同的 API,并使用相同的协议。

例如:Storm作为一个实时处理的框架,产生的消息需要快速的进行处理,比如存在消息队列ZeroMQ里面。 由于消息队列ZeroMQ是C++写的,而我们的程序是运行在JVM虚拟机里面的。

所以需要jzmq这个桥梁来黏合C++程序接口和Java程序接口。

ZeroMQ简介

zeroMQ不是TCP,不是socket,也不是消息队列,而是这些的综合体

ZMQ一个处理消息传输的库,重点在传输上。
是网络通信中新的一层,介于应用层传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。
在这里插入图片描述
ZMQ不是单独的服务,而是一个嵌入式库,它封装了网络通信、消息队列、线程调度等功能,向上层提供简洁的API,应用程序通过加载库文件,调用API函数来实现高性能网络通信。
基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。
ZeroMQ是以库的形式存在,由应用程序加载、运行即可。但是ZeroMQ仅提供非持久性的消息队列。

在Socket API之上做了一层封装,将网络通讯、进程通讯和线程通讯抽象为统一的API接口。

优缺点

因此ZeroMQ具有一个独特的非中间件的模式,更像一个socket library,你不需要安装和运行一个消息服务器或中间件,因为你的应用程序本身就是使用ZeroMQ API完成逻辑服务的角色。但是ZeroMQ仅提供非持久性的队列,如果down机,数据将会丢失。如:Twitter的Storm中使用ZeroMQ作为数据流的传输。

Socket

參考链接:
https://blog.csdn.net/pashanhu6402/article/details/96428887
https://www.runoob.com/w3cnote/android-tutorial-socket1.html
https://www.cnblogs.com/dolphinX/p/3460545.html
https://blog.csdn.net/sight_/article/details/8138802

TCP/IP协议族

TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准:
不同于ISO模型的七个分层,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中
在这里插入图片描述
在这里插入图片描述

简介

socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。:
在这里插入图片描述

两个主机应用通信数据图:
在这里插入图片描述

所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。
一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。

网络中进程之间如何通信?
首要解决的问题是如何唯一标识一个进程
其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。
网络中的进程是通过socket来通信的

套接字Socket=(IP地址:端口号)
要通过互联网进行通信,至少需要一对套接字,其中一个运行于客户端,我们称之为 Client Socket,另一个运行于服务器端,我们称之为 Server Socket

支持的通信模式

参考链接:https://blog.csdn.net/qq_41453285/article/details/105984928
https://blog.csdn.net/mysunshinexia01/article/details/80871696

支持扇出(fan-out)、发布-订阅(pub-sub)、任务分发(task distribution)、请求/响应(request-reply)等通信模式。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
ActiveMQ是基于Java的消息队列中间件,支持传输协议包括TCP、STOMP、MQTT等。它使用JMS(Java消息服务)API,支持消息发布/订阅、点对点等模式。ActiveMQ提供了可靠性、安全性、事务特性等,适用于大规模数据交换场景。[^1] RabbitMQ是一个开源的AMQP(高级消息队列协议)消息代理软件,使用Erlang实现。它支持多种编程语言,包括Java、C#、Python、PHP等,具有轻量、高可用、易用等特点,适用于分布式系统、大规模数据处理等场景。[^2] ZeroMQ,又称为0MQ,是一个高性能、异步消息库,可以在不同的应用、进程、线程之间进行消息传输。它支持多种数据传输协议和模式,包括PUSH-PULL、PUB-SUB、REQ-REP等,具有轻量、快速、灵活等特点,适用于高并发、消息即时响应等场景。[^3] Kafka是由Apache开源的高吞吐量、分布式发布订阅消息系统,使用Scala编写。它支持发布订阅、消息存储等功能,具有高可靠性、可扩展性、高吞吐量等特点,适用于日志收集、数据分析等场景。[^4] MetaMQ是一款国产的开源消息队列中间件,支持基于HTTP协议的消息服务,使用Java语言编写。它具有高性能、高并发等特点,适用于互联网金融、物联网等场景。[^5] RocketMQ是阿里巴巴开源的分布式消息中间件,支持多种发送模式,具有高可用性、高性能、低延迟等特点,适用于大规模消息处理、分布式系统等场景。[^6]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风吹海洋浪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值