rocketmq

Kafka、RabbitMQ、RocketMQ、ActiveMQ

心已入冬 提交于 2019-12-15 05:27:06
一、资料文档 Kafka:中。有kafka作者自己写的书,网上资料也有一些。rabbitmq:多。有一些不错的书,网上资料多。zeromq:少。没有专门写zeromq的书,网上的资料多是一些代码的实现和简单介绍。rocketmq:少。没有专门写rocketmq的书,网上的资料良莠不齐,官方文档很简洁,但是对技术细节没有过多的描述。activemq:多。没有专门写activemq的书,网上资料多。 二、开发语言 Kafka:Scala rabbitmq:Erlang zeromq:c rocketmq:java activemq:java 三、支持的协议 Kafka:自己定义的一套…(基于TCP) rabbitmq:AMQP zeromq:TCP、UDP rocketmq:自己定义的一套… activemq:OpenWire、STOMP、REST、XMPP、AMQP 四、消息存储 Kafka:内存、磁盘、数据库。支持大量堆积。 kafka的最小存储单元是分区,一个topic包含多个分区,kafka创建主题时,这些分区会被分配在多个服务器上,通常一个broker一台服务器。分区首领会均匀地分布在不同的服务器上,分区副本也会均匀的分布在不同的服务器上,确保负载均衡和高可用性,当新的broker加入集群的时候,部分副本会被移动到新的broker上。根据配置文件中的目录清单

Linux下RocketMQ下载安装教程

杀马特。学长 韩版系。学妹 提交于 2019-12-14 16:19:06
一、下载 1、官网下载: 下载地址 2、百度网盘下载: 下载地址 提取码:0g5a java开发工具下载地址及安装教程大全,点 这里 。 更多深度技术文章,在 这里 。 二、安装及启动 1、将zip文件上传到linux的~下,然后解压: 执行:unzip rocketmq-all-4.4.0-bin-release.zip,若unzip命令不存在,执行:yum install -y unzip zip 2、移动并重命名 执行:mv rocketmq-all-4.4.0-bin-release /usr/local/rocketmq 3、进入/usr/local/rocketmq/bin目录下 执行:cd /usr/local/rocketmq/bin 4、如果是在真实的linux服务器上安装rocketmq,则内存是足够的,如果是在虚拟机上安装rocketmq进行学习用,可能虚拟机的内存只分配了1G,那么 是不够用的。启动rocketmq可能会启动不成功。此时就先修改一下启动所需的内存参数。 (1)修改runserver.sh 执行:vi runserver.sh 将其内存修改为128m并保存,如下: (2)修改runbroker.sh 同理将其修改为128m(与修改runserver.sh一样) 5、启动nameserver,在bin目录下执行:nohup sh

聊聊rocketmq的sendBatchMessage

五迷三道 提交于 2019-12-14 12:40:40
序 本文主要研究一下rocketmq的sendBatchMessage SendMessageRequestHeader rocketmq-all-4.6.0-source-release/common/src/main/java/org/apache/rocketmq/common/protocol/header/SendMessageRequestHeader.java public class SendMessageRequestHeader implements CommandCustomHeader { @CFNotNull private String producerGroup; @CFNotNull private String topic; @CFNotNull private String defaultTopic; @CFNotNull private Integer defaultTopicQueueNums; @CFNotNull private Integer queueId; @CFNotNull private Integer sysFlag; @CFNotNull private Long bornTimestamp; @CFNotNull private Integer flag; @CFNullable private String

RocketMQ:一个纯java的开源消息中间件--开发测试环境搭建

本秂侑毒 提交于 2019-12-14 00:18:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、简介 RocketMQ的前身是Metaq,当 Metaq 3.0发布时,产品名称改为 RocketMQ MetaQ2.x版本由于依赖了alibaba公司内部其他系统,对于公司外部用户使用不够友好,推荐使用3.0版本。 项目地址: https://github.com/alibaba/RocketMQ 二、安装RocketMQ 安装RocketMQ需要jdk1.6, maven,git环境 如果本机没有安装git,请使用如下命令安装 yum install git 具体安装步骤可以参考 RocketMQ 项目组给出的步骤,参见: https://github.com/alibaba/RocketMQ/wiki/Quick-Start git clone https://github.com/alibaba/RocketMQ.git cd RocketMQ sh install.sh cd devenv 安装完成后,因为install.sh脚本中创建devenv 符号链接写错了目录,需要在RocketMQ目录下执行如下命令: rm -rf devenv ln -s target/alibaba-rocketmq-3.0.7/alibaba-rocketmq devenv 启动RocketMQ cd devenv

分布式之消息队列的特点、选型、及应用场景详解

主宰稳场 提交于 2019-12-13 19:02:21
什么是消息队列 消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列。 消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,有消息系统来确保信息的可靠专递,消息发布者只管把消息发布到MQ中而不管谁来取,消息使用者只管从MQ中取消息而不管谁发布的,这样发布者和使用者都不用知道对方的存在。 Producer:消息生产者,负责产生和发送消息到 Broker; Broker:消息处理中心。负责消息存储、确认、重试等,一般其中会包含多个 queue; Consumer:消息消费者,负责从 Broker 中获取消息,并进行相应处理; 现在常用的MQ组件有ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ,当然近年来火热的Kafka,从某些场景来说,也是MQ,当然kafka的功能更加强大。 虽然不同的MQ都有自己的特点和优势,但是,不管是哪种MQ,都有MQ本身自带的一些特点,下面,咱们谈谈消息队列的的特点、优势、选型、以及应用场景。 为什么需要消息队列 在高并发分布式环境下,由于来不及同步处理,通过使用消息队列,可以异步处理请求,从而缓解系统的压力。 举一个订单系统的例子:用户点击下订单

如果有人再问你怎么实现分布式延时消息,这篇文章丢给他

安稳与你 提交于 2019-12-13 18:07:15
1.本地延时 在实现分布式消息队列的延时消息之前,我们想想我们平时是如何在自己的应用程序上实现一些延时功能的?在Java中可以通过下面的方式来完成我们延时功能: ScheduledThreadPoolExecutor:ScheduledThreadPoolExecutor继承了ThreadPoolExecutor,我们提交任务的时候,会将任务首先提交到DelayedWorkQueue一个优先级队列中,按照过期时间进行排序,这个优先级队列也就是我们堆结构,每次提交任务排序的复杂度是O(logN)。然后取任务的时候就会从堆顶取出我们的任务,也就是我们延迟时间最小的任务。ScheduledThreadPoolExecutor有个好处是执行延时任务可以支持多线程并行执行,因为他继承的是ThreadPoolExecutor。 Timer:Timer也是利用优先级队列结构做的,但是其没有继承线程池,相对来说比较独立,不支持多线程,只能使用单独的一个线程。 2.分布式消息队列延时 我们实现本地延时比较简单,直接使用Java中现成的即可,那我们分布式消息队列的实现有哪些难点呢? 有很多同学首先会想到我们实现分布式消息队列的延时任务,可不可以直接使用本地的那一套,用ScheduledThreadPoolExecutor,Timer,当然这是可以的,前提是你的消息量很小

消息中间件介绍、典型使用场景、以及使用原则

ⅰ亾dé卋堺 提交于 2019-12-13 16:34:05
一、kafka 1、不完全符合jms规范,注重吞吐量,类似udp 和 tcp 2、一般做大数据吞吐的管道 我们现在的用途就是负责在各个idc之间通信 3、量大对数据不是百分之百保证的,会有数据丢失,不是百分百送达(amq和rmq等有重发机制,而kafka没有);在吞吐量有提升 ,在这方面就得有牺牲, 所以kafka适合大数据量流转, 比如日志数据 比如用作统计的数据。 二、activeMQ ActiveMQ居于两者之间,类似于ZemoMQ,它可以部署于代理模式和P2P模式。类似于RabbitMQ,它易于实现高级场景,而且只需付出低消耗。它被誉为消息中间件的“瑞士军刀”。 三:RocketMQ(阿里官方指定消息中间件) RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物联网、车联网等。 消息中间件使用的典型场景优四个 1.典型的异步处理 2.应用解耦 3.流量削锋 4.消息通讯四个场景 比如:今日头条的私信就是一个典型的消息通讯场景,因为消息通讯的数据不需要即使立即同步回来,不算是核心数据,可以延时通过异步的消息发送,这样可以降低系统的负荷。 所以,我们在架构设计的时候

分布式之消息队列的特点、选型、及应用场景详解

故事扮演 提交于 2019-12-13 16:13:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 什么是消息队列 消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列。 消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,有消息系统来确保信息的可靠专递,消息发布者只管把消息发布到MQ中而不管谁来取,消息使用者只管从MQ中取消息而不管谁发布的,这样发布者和使用者都不用知道对方的存在。 Producer:消息生产者,负责产生和发送消息到 Broker; Broker:消息处理中心。负责消息存储、确认、重试等,一般其中会包含多个 queue; Consumer:消息消费者,负责从 Broker 中获取消息,并进行相应处理; 现在常用的MQ组件有ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ,当然近年来火热的Kafka,从某些场景来说,也是MQ,当然kafka的功能更加强大。 虽然不同的MQ都有自己的特点和优势,但是,不管是哪种MQ,都有MQ本身自带的一些特点,下面,咱们谈谈消息队列的的特点、优势、选型、以及应用场景。 为什么需要消息队列 在高并发分布式环境下,由于来不及同步处理,通过使用消息队列

消息中间件介绍、典型使用场景、以及使用原则

二次信任 提交于 2019-12-13 15:24:21
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、kafka 1、不完全符合jms规范,注重吞吐量,类似udp 和 tcp 2、一般做大数据吞吐的管道 我们现在的用途就是负责在各个idc之间通信 3、量大对数据不是百分之百保证的,会有数据丢失,不是百分百送达(amq和rmq等有重发机制,而kafka没有);在吞吐量有提升 ,在这方面就得有牺牲, 所以kafka适合大数据量流转, 比如日志数据 比如用作统计的数据。 二、activeMQ ActiveMQ居于两者之间,类似于ZemoMQ,它可以部署于代理模式和P2P模式。类似于RabbitMQ,它易于实现高级场景,而且只需付出低消耗。它被誉为消息中间件的“瑞士军刀”。 三:RocketMQ(阿里官方指定消息中间件) RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物联网、车联网等。 消息中间件使用的典型场景优四个 1.典型的异步处理 2.应用解耦 3.流量削锋 4.消息通讯四个场景 比如:今日头条的私信就是一个典型的消息通讯场景,因为消息通讯的数据不需要即使立即同步回来,不算是核心数据

聊聊rocketmq的HAClient

你离开我真会死。 提交于 2019-12-13 00:04:34
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 序 本文主要研究一下rocketmq的HAClient HAClient rocketmq-all-4.6.0-source-release/store/src/main/java/org/apache/rocketmq/store/ha/HAService.java class HAClient extends ServiceThread { private static final int READ_MAX_BUFFER_SIZE = 1024 * 1024 * 4; private final AtomicReference<String> masterAddress = new AtomicReference<>(); private final ByteBuffer reportOffset = ByteBuffer.allocate(8); private SocketChannel socketChannel; private Selector selector; private long lastWriteTimestamp = System.currentTimeMillis(); private long currentReportedOffset = 0; private int