IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Rocketmq常见问题与阶段性总结 -> 正文阅读

[大数据]Rocketmq常见问题与阶段性总结

前面的文章分析了Rocketmq消息队列的常用功能原理,涉及到如下内容:

Rocketmq消息中间件实现了消息队列的基本功能,如消息发送,集群消费,广播消费,也实现了消息堆积,事务消息,定时消息,?顺序消息等高级功能。

Rocket常见问题?分析总结:

一、如何保证消息不重复消费?

?????在Rocketmq中每条消息都有一个唯一的key代表不同消息实体,Rocketmq本身并不保证消息不被重复消费,它通过重试机制保证消息至少被消费者消费一次,因此可能在网络抖动情况下出现消息重复投递的情况,如何达到消息不被重复消费呢?

这里介绍笔者工作中常用的两种方式:

1、消息消费记录表

?????消息业务id作为主键或者唯一id,每次消费前判断是否存在消费记录,可以尝试插入操作,如果已经存在则会报主键冲突(类似于redis的setNx指令效果)。存在则不消费,否则继续消费。

2、通过redis的setnx指令

?????Redis Setnx(SET?if?Not eXists)?命令在指定的 key 不存在时,为 key 设置指定的值。

这里保证key是消息的唯一标志。

二、消息堆积如何处理?

1、提高消费并行度?

?????同一个ConsumerGroup,通过增加 Consumer 实例数量来提高并行度(需要注意的是超过订阅队列数的 Consumer 实例无效)。可以通过加机器,或者在已有机器启动多个进程的方式。

???提高单个 Consumer 的消费并行线程(扩大消费者线程池,默认20个核心线程),通过修改参数 consumeThreadMin、consumeThreadMax实现。?

2、批量消费方式?

?????某些业务流程如果支持批量方式消费,则可以很大程度上提高消费吞吐量,例如订单扣款类应用,一次处理一个订单耗时 1 s,一次处理 10 个订单可能也只耗时 2 s,这样即可大幅度提高消费的吞吐量,通过`设置 consumer的?consumeMessageBatchMaxSize?参数`,默认是?1,即一次只消费一条消息,例如设置为 N,那么每次消费的消息数小于等于 N。?

3、跳过非重要消息?

?????过滤掉不重要的消息,追赶上生产者进度发生消息堆积时,如果消费速度一直追不上发送速度,如果业务对数据要求不高的话,可以选择丢弃不重要的消息。例如,当某个队列的消息数堆积到100000条以上,则尝试丢弃部分或全部消息,这样就可以快速追上发送消息的速度?。

如何定位具体哪个线程消费消息慢?

通过jstack 查看消费者线程状态,判断阻塞线程。

三、Rocketmq如何保证消息不丢失

消息丢失这个话题必须?在Rocketmq的各个组成角色的角度来分析。

1、?生产者自带重试功能

???????至多重试2次。

??????如果同步模式发送失败,则轮转到下一个Broker,如果异步模式发送失败,则只会在当前Broker进行重试。这个方法的总耗时时间不超过sendMsgTimeout设置的值,默认10s。

?????如果本身向broker发送消息产生超时异常,就不会再重试。?

2、broker高可用和高可靠?

主从同步机制?

brokerRole broker角色类型

ASYNC_MASTER, 异步同步主节点

SYNC_MASTER, 同步同步主节点?

SLAVE; 从节点?

DiskFlush 刷盘策略?

默认写入缓冲区,不会同步落盘,通过定时5s进行刷新落盘

SYNC_FLUSH, 同步刷盘,刷盘完成再返回给客户端,超时5s

ASYNC_FLUSH,异步刷盘,200ms刷新一次,性能高?

3、消费者

?????消费者消费消息时关闭自动提交ack,而是采用手动提交消息offset,消费者消费消息不成功,不返回CONSUME_SUCCESS,返回RECONSUME_LATER表示需要broker再次投递该消息。

生产者和broker保证消息不丢失,可能导致消息重复投递,因此消费者需要做幂等性处理。?

最后看下Rocket官网给出的Rocketmq和Kafka消息中间件的对比?:

学习了Rocketmq后发现Rocketmq确实是一个优秀的消息中间件,它不仅有阿里等大厂大流量的使用和历练,还拥有活跃的社区,最新的文档,不停的升级迭代,源码学习可以了解消息中间件的运行原理,对消息队列的实现机制更加掌握。

2020新的开始,祝大家新年快乐,2020继续学习新技术,一起继续进步?!?!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-04 13:29:40  更:2022-01-04 13:32:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:31:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码