rocketmq一个topic多个group_你需要知道的RocketMQ

本文全面介绍了RocketMQ的核心概念,包括Topic与Queue的关系、网络模型、存储架构以及高可用性策略。 RocketMQ的Topic与Kafka的分区有所不同,其Queue分为读写队列,可能导致消息无法消费的问题。RocketMQ使用Netty作为网络框架,提供集群和广播消费模式。其存储模型注重高性能日志存储,通过ConsumeQueue提高消费效率。RocketMQ的高可用性通过多种集群模式和刷盘策略确保消息的可靠存储与复制。
摘要由CSDN通过智能技术生成

1.概述

在很久之前写过一篇Kafka相关的文章,你需要知道的Kafka,那个时候在业务上更多的是使用的是Kafka,而现在换了公司之后,更多的使用的是Rocketmq,本篇文章会尽力全面的介绍RocketMQ和Kafka各个关键点的比较,希望大家读完能有所收获。

RocketMQ前身叫做MetaQ, 在MeataQ发布3.0版本的时候改名为RocketMQ,其本质上的设计思路和Kafka类似,但是和Kafka不同的是其使用Java进行开发,由于在国内的Java受众群体远远多于Scala,所以RocketMQ是很多以Java语言为主的公司的首选。同样的RocketMQ和Kafka都是Apache基金会中的顶级项目,他们社区的活跃度都非常高,项目更新迭代也非常快。

2.入门实例

2.1 生产者

public class Producer {    public static void main(String[] args) throws MQClientException, InterruptedException {        DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");        producer.start();        for (int i = 0; i 

直接定义好一个producer,创建好Message,调用send方法即可。

2.2 消费者

public class PushConsumer {    public static void main(String[] args) throws InterruptedException, MQClientException {        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("CID_JODIE_1");        consumer.subscribe("TopicTest", "*");        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);        //wrong time format 2017_0422_221800        consumer.setConsumeTimestamp("20181109221800");        consumer.registerMessageListener(new MessageListenerConcurrently() {            @Override            public ConsumeConcurrentlyStatus consumeMessage(List msgs, ConsumeConcurrentlyContext context) {                System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs);                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;            }        });        consumer.start();        System.out.printf("Consumer Started.%n");    }}

3.RocketMQ架构原理

对于RocketMQ先抛出几个问题:

  • RocketMQ的topic和队列是什么样的,和Kafka的分区有什么不同?
  • RocketMQ网络模型是什么样的,和Kafka对比如何?
  • RocketMQ消息存储模型是什么样的,如何保证高可靠的存储,和Kafka对比如何?

3.1 RocketMQ架构图

10b293fab1a1b3df780de2f33858aae6.png

对于RocketMQ的架构图,在大体上来看和Kafka并没有太多的差别,但是在很多细节上是有很多差别的,接下来会一一进行讲述。

3.2 RocketMQ名词解释

在3.1的架构中我们有多个Producer,多个主Broker,多个从Broker,每个Producer可以对应多个Topic,每个Consumer也可以消费多个Topic。

Broker信息会上报至NameServer,Consumer会从NameServer中拉取Broker和Topic的信息。

  • Producer:消息生产者,向Broker发送消息的客户端
  • Consumer:消息消费者,从Broker读取消息的客户端
  • Broker:消息中间的处理节点,这里和kafka不同,kafka的Broker没有主从的概念,都可以写入请求以及备份其他节点数据,RocketMQ只有主Broker节点才能写,一般也通过主节点读,当主节点有故障或者一些其他特殊情况才会使用从节点读,有点类似- 于mysql的主从架构。
  • Topic:消息主题,一级消息类型,生产者向其发送消息, 消费者读取其消息。
  • Group:分为ProducerGroup,ConsumerGroup,代表某一类的生产者和消费者,一般来说同一个服务可以作为Group,同一个Group一般来说发送和消费的消息都是一样的。
  • Tag:Kafka中没有这个概念&#
  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值