6.RocketMQ-常见问题

为什么选择rocketMQ

参照:https://rocketmq.apache.org/docs/motivation/
搭建rocketMQ动机
在早起是基于ActiveMQ 5.X进行搭建了分布式消息中间件,但是当吞吐量增加的时候,发现消息集群处理非常迫切需要;

随后选择采用kafka,但是发现它本身是一个分布式流平台,对于alibaba的大吞吐,高并发的场景不适用;

所以alibaba发明了rocketMQ,该组件应用广泛,可以用于发布/订阅场景,用以满足高容量,消息不丢失的需求。

那为什么kafka不适用呢?

1.生产者的并行写操作会收到分区个数的制约
2.消费者消费并行性的程度也受到正在消费的分区数量的限制。假设分区的数量为20,则并发消费消费者的最大数量为20
3.每个主题由固定的分区数组成,所以分区去也制约了主题的个数;

kafka为什么不支持更多分区

1.Each partition stores the whole message data. Although each partition is orderly written to the disk, as number of concurrently writing partitions increases, writing become random in the perspective of operating system.

2.Due to the scattered data files, it is difficult to use the Linux IO Group Commit mechanism.

RocketMQ如何支持更多分区

在这里插入图片描述

  1. 所有消息数据都存储在提交日志文件中。所有写入都是完全连续的,而读取是随机的。

  2. ConsumeQueue存储实际的用户消费位置信息,这些信息也会按顺序刷新到磁盘。

每个消费队列都是轻量级的,包含的元数据数量有限。

对磁盘的访问是完全按顺序进行的,这避免了磁盘锁争用,并且在创建大量队列时不会导致高磁盘IO等待。

对比

在这里插入图片描述

常见问题

新创建的consumer从哪里开始消费

  1. 如果是三天内发送的消息,则会从第一条消息开始消费
  2. 如果是3天以前发送的消息(默认只保留3天),则三天前的消息就无法读取到了,将会从message queue的tail部位开始消费
  3. 如果消费者重启,则会从上一次的消费offset位置开始消费

消费失败后,如何消费

  1. 如果是集群模式,则会重试,最多16次重试机会
  2. 如果是广播模式,则没有重试

如何查询消费失败的消息

  1. 使用“按时间主题查询”, 可以查询这段时间内的消息。
  2. 按照topic和消息ID可以精准查找某条消息
  3. 按照topic和message key可以查询同一message key类型的消息集合

配置相关

  1. 消息会被存储过久–默认存储3天
  2. 消息体的最大大小限制是多少–256KB
  3. 如何设置消费端的线程数

consumer.setConsumeThreadMin(20);
consumer.setConsumeThreadMax(20);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. RocketMQ的架构是怎样的? RocketMQ的架构主要包括Producer、Broker、Consumer三个组件,其中Producer负责消息的生产,Broker负责消息的存储和转发,Consumer负责消息的消费。 2. 如何保证消息的可靠性? RocketMQ采用了多种方式保证消息的可靠性,比如消息的持久化存储、消息的冗余备份、消息的重试机制、消息的顺序保证等。 3. RocketMQ的消息模型有哪些? RocketMQ的消息模型主要分为点对点模型和发布订阅模型两种。点对点模型中一个消息只能被一个消费者消费,发布订阅模型中一个消息可以被多个消费者消费。 4. RocketMQ的消息存储方式是怎样的? RocketMQ的消息存储方式采用了基于文件的存储方式,将消息存储在磁盘上,同时采用了内存映射的方式提高读写效率。 5. RocketMQ的消息发送流程是怎样的? RocketMQ的消息发送流程主要包括消息的生产、消息的发送、消息的存储和消息的消费四个步骤。其中消息的生产和消费由应用程序完成,消息的发送和存储由RocketMQ的Broker完成。 6. 如何保证消息的顺序性? RocketMQ可以通过设置消息的顺序关键字和消息的队列选择策略来保证消息的顺序性,保证同一个顺序关键字的消息只会被同一个消费者消费,从而保证消息的顺序性。 7. 如何保证消息的高可用性? RocketMQ可以通过Broker的冗余备份、Master-Slave模式、自动故障转移等方式保证消息的高可用性,从而保证系统的稳定性和可靠性。 8. RocketMQ的消息堆积如何处理? RocketMQ可以通过设置消息的存储时间、消息的过期时间、消息的重试机制等方式避免消息的堆积问题,从而保证系统的正常运行。同时也可以通过监控系统对消息的堆积情况进行实时监控和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值