消息中间件
文章平均质量分 83
RocketMQ、kafka
不识君的荒漠
apche rocketmq contributor、incubator-shenyu contributor,基础组件研发方向。
展开
-
RocksDB, 大数据量的去重实践记录
RocksDB是 Facebook 开源的一个高性能、持久化、 KV 存储。数据存储采用的是一种叫做LSM-Tree(The Log-Structured Merge-Tree)的数据结果。原创 2023-03-19 12:46:46 · 817 阅读 · 0 评论 -
kafka-console-ui v1.0.6发布
kafka-console-ui 是一款web版的kafka管理平台,从第一次发布到现在已经两年了,断断续续也更新了7个版本了(v1.0.0~v1.0.6)。原创 2023-02-26 22:53:01 · 676 阅读 · 0 评论 -
kafka的客户端限流(资源配额)
本文说明的是Kafka的客户端(生产者、消费者)与broker之前的限流,不是kafka的broker间topic副本同步的限流。原创 2022-12-19 22:03:00 · 3336 阅读 · 0 评论 -
idea配置RocketMQ本地开发环境
rocketmq在idea中开发的配置方式,早期的版本与现在版本配置参数是否完全一样,我也记不太清了,下文以4.9.5版本进行说明。idea用的也是最新版本,可能与2021之前的版本在环境变量配置的界面也有点不太一样。下载代码:默认拉取下来是master分支,可以切换到develop分支。如果需要提交pr,请再从develop拉取自己的本地分支。用idea打开代码。 主要需要在idea启动中运行namesrv和broker两个模块,这两个模块下有相关的启动函数。启动类路径:启动前设置相关环境变量原创 2022-07-14 15:31:05 · 1128 阅读 · 0 评论 -
kafka开启ACL,请求慢出现超时的解决办法
正常情况下,使用某个kafka管理平台(或者是使用kafka提供的admin client)调用kafka的接口查询相关信息,比如查询topic列表,请求是很快的,如下:正常情况(网络也没问题),请求一般是很快的,如果通过一些管理平台,页面显示也是很流畅的。目前有几次遇到请求特别慢,接近10秒甚至数十秒的情况,一些管理平台就可能出现超时现象或者查询的特别慢。我目前遇到2次,说明如下:环境信息如下:当时在公司的时候是没有问题的,回家的时候因为要开启VPN就会出现这个问题,管理平台页面特别慢,甚至查询不出来。环原创 2022-07-07 08:40:18 · 1381 阅读 · 0 评论 -
二分查找在RocketMQ和Kafka中的应用
二分查找二分查找是在有序元素中找到目标元素或最终未找到返回。算法模板如下:原创 2022-01-25 23:30:00 · 2494 阅读 · 0 评论 -
kafka为什么有的消息的时间戳的值是-1
kafka消息的格式有多个版本,在老版本中,是没有时间戳这个字段的。按照文档说明,在0.11之前的版本中,消息的发送和存储都是在消息集合中,每条消息都有相关元数据信息,这时候消息格式有两个版本:版本0和版本1,如下:原创 2022-01-14 23:30:00 · 1910 阅读 · 0 评论 -
不要再苦恼没有合适的kafka管理平台,给你分享10款kafka管理工具
不要再苦恼没有合适的kafka管理平台,给你分享10款kafka管理工具,快速了解,选择一款适合自己的。原创 2021-12-04 14:08:16 · 18362 阅读 · 1 评论 -
Kafka使用脚本根据时间重置消费位移,格式你写对了么?
kafka提供了消费组命令工具管理消费组:kafka-consumer-groups.sh,在0.11版本之后引入位移重置功能,本文主要聊一下根据时间重置消费位点时候,这个时间格式的问题。原创 2021-11-29 23:22:28 · 3428 阅读 · 0 评论 -
Kafka生产者消息发送流程
本文以图解和文字的方式尽量直白的说明kafka生产者的消息发送流程,不会对太多源码部分分析。原创 2021-11-25 09:43:55 · 2975 阅读 · 0 评论 -
推荐一款轻量级的kafka管理平台: kafka-console-ui
介绍kafka-console-ui 是一款轻量级的kafka可视化管理平台,安装、配置特别简单,一般来说只需要配置一个kafka集群地址启动即可。不是一个企业级的平台,目前看来只适合中、小型集群的管理。这个工具看起来是挺low的,但是对于刚接触kafka急需一个合适工具进行管理的同学来说,还是挺友好的,没有国际化支持,全是中文展示。github地址:https://github.com/xxd763795151/kafka-console-ui页面布局有点类似rocketmq-cons原创 2021-11-13 23:38:46 · 2825 阅读 · 1 评论 -
kafka新老集群平滑迁移实践
前言之前公司一直使用云上的kafka服务,随着业务规模和体量的增大,使用云上的服务成本相对比较高,所以考虑本地自建kafka集群对外提供服务。因此,需要把正在运行的还在使用云上kafka的业务服务迁移到本地,改为使用本地的kafka集群。...原创 2021-11-04 21:00:55 · 2290 阅读 · 1 评论 -
如何通过可视化方式快捷管理kafka的acl配置
前言我在kafka快速配置启用ACL示例中,以SASL_SCRAM配置方式为示例说明了如何快速在一个kafka集群中启用认证授权机制,提高集群使用的安全性。但是可能有这一样种场景,比如有多个部门,不同的项目组或项目之间都在共用这个集群,不同的项目组或项目之间会使用不同的用户名/密码或者对不同的topic/消费组分别进行授权,这样,如果我们每次都通过命令的方式,用户信息或者topic数量比较多的时候,无论是查看或者修改都极不方便,所以需要一个可视化的控制台可以便捷的进行操作。kafka-conso原创 2021-09-09 15:07:43 · 1219 阅读 · 14 评论 -
kafka快速配置启用ACL示例
前言kafka支持基于SSL和SASL两种认证机制,本文以SASL说明。kafka支持的SASL机制有5种:GSSAPI、PLAIN、SCRAM、OAUTHBEARER、Delegation Token。本文使用SCRAM认证方式:一种通过用户名/密码的认证机制,可以动态增加和删除(PLAIN也是用户名/密码认证,但是写死在配置文件,增加新配置需要重启)kafka版本我现在用的是从github trunk分支拉的最新代码,启动的版本信息如下:Starting build with ve原创 2021-08-30 22:27:18 · 3263 阅读 · 2 评论 -
本地idea配置kafka源码调试环境
前言最近需要调试kafka源码,所以在本地idea配置一下运行环境,分享一下,给后面的新同学一个参考。环境下面是我用的环境,可以保证正确运行系统:mac os jdk:1.8.0_271 idea: 2020.2 kafka: 写这篇博文的时候,用的是最新的trunk分支的代码安装scala插件先安装scala插件,安装完成重启idea,我这已经安装过了克隆代码克隆kafka的代码到本地,如果克隆不成功可以直接下载到本地,怎么弄下来的不重要,重要的是代码下载到本地:.原创 2021-08-19 09:52:06 · 2721 阅读 · 0 评论 -
可直接拿来用的kafka+prometheus+grafana监控告警配置
kafka配置jmx_exporter点击:https://github.com/prometheus/jmx_exporter,选择下面的jar包下载:将下载好的这个agent jar包上传到kafka的broker节点所在服务器上,每个broker都需要,比如上传到如下路径:/opt/agent/jmx_prometheus_javaagent-0.16.1.jar修改kafka启动脚本: bin/kafka-run-class.sh,增加java agent配置如下:JMX原创 2021-08-15 22:48:26 · 9226 阅读 · 45 评论 -
RocketMQ事务消息篇(三)之事务消息源码分析
前言RocketMQ事务消息篇(一)之事务消息的介绍RocketMQ事务消息篇(二)之事务消息的使用本文继前两篇对事务消息源码进行分析。事务消息处理流程源码分析客户端处理,事务消息怎么发送broker端接收到事务半消息做了什么事务的二阶段处理事务怎么回查结语...原创 2021-08-02 00:20:03 · 506 阅读 · 0 评论 -
RocketMQ事务消息篇(二)之事务消息的使用
前言在RocketMQ事务消息篇(一)之事务消息的介绍里对RocketMQ的事务消息作了相关说明,本文提供一些基本的开发示例。原创 2021-07-24 16:00:44 · 733 阅读 · 0 评论 -
RocketMQ主机磁盘空间有限,无限期延长消息存储的一种解决方案
前言RocketMQ作为国人开源的一款消息引擎,相对kafka也更加适合在线的业务场景,在业内使用的也是非常广泛,很多同学也是非常熟悉它及它的存储机制,所以这里不再对它的原理性东西作太多说明。我们也知道,RocketMQ所有的数据如消息信息都是以文件形式保存到broker节点所在主机上指定的分区目录下,比如消息的数据都是保存在commitlog中,默认保存72小时(在磁盘使用率未达到阈值的情况下)会在指定时间清理过期数据,释放磁盘空间。当然,如果消息量不大且所在磁盘的分区够大,我们可以增加消息的原创 2021-07-07 00:01:57 · 1783 阅读 · 1 评论 -
RocketMQ事务消息篇(一)之事务消息的介绍
什么是事务什么是分布式事务RocketMQ的事务消息原创 2021-06-24 09:40:27 · 710 阅读 · 1 评论 -
rocketmq-spring的consumer设置消费失败最大重试次数
说明rocketmq-spring的consumer的相关属性配置有两种方式:在配置文件中进行中在类上@RocketMQMessageListener注解原创 2021-06-18 22:56:55 · 6410 阅读 · 3 评论 -
RocketMQ客户端修改默认日志配置【golang版】
前置说明go默认使用logrus,但是提供了接口,可以自定义日志实现,官网说明如下:Set LoggerGo Client define theLoggerinterface for log output, user can specify implementation of private. in default, client uselogrus.rlog.SetLogger(Logger)适用场景自定义日志格式、日志输出目录(采集、监控、统计分析等场景下使用)示...原创 2021-03-12 23:31:31 · 1657 阅读 · 0 评论 -
RocketMQ客户端修改默认日志配置【java版】
RocketMQ客户端日志默认配置内部日志初始化代码 static { // 是否使用项目配置的slf4j记录日志,默认不使用 CLIENT_USE_SLF4J = Boolean.parseBoolean(System.getProperty(CLIENT_LOG_USESLF4J, "false")); if (!CLIENT_USE_SLF4J) { InternalLoggerFactory.setCurrent原创 2021-03-12 23:13:44 · 2672 阅读 · 0 评论 -
RocketMQ Producer重试机制
版本4.7.1功能特性官网说明Producer的send方法本身支持内部重试,重试逻辑如下:至多重试2次。如果同步模式发送失败,则轮转到下一个Broker,如果异步模式发送失败,则只会在当前Broker进行重试。这个方法的总耗时时间不超过sendMsgTimeout设置的值,默认10s。如果本身向broker发送消息产生超时异常,就不会再重试。以上策略也是在一定程度上保证了消息可以发送成功。如果业务对消息可靠性要求比较高,建议应用增加相应的重试逻辑:比如调用send同步方法发送失败时,原创 2021-01-30 00:07:47 · 1030 阅读 · 0 评论 -
RocketMQ消息轨迹
开启消息轨迹broker端traceTopicEnable属性设置为true,默认值为false。设置为true,broker启动的时候会初始化存储轨迹数据的默认topic:RMQ_SYS_TRACE_TOPIC;traceOn属性设置为true,默认值也是true。该忏悔如果设置false,客户端不会发送轨迹数据到broker端producer构造producer对象的时候,设置enableMsgTrace=true,customizedTraceTopic可以为空,使用默认的topic,其它重原创 2021-01-22 23:49:02 · 2821 阅读 · 0 评论 -
RocketMQ还在使用4.7.1版本的DLedger模式么,建议升级到4.8.0吧
最新的4.8.0在处理发送消息的时候通过流水线的方式,大大的提升了消息发送的吞吐量。在先前的版本,我查看源码发现存在以下几个问题,其中部分问题在4.8.0中依然存在:因为提交消息的时候需要同步阻塞等待法定人数的从节点的ack才能返回,对于消息发送的性能影响非常大。 /** * Handle the append requests: * 1.append the entry to local store * 2.submit the future to entry原创 2021-01-20 00:39:23 · 859 阅读 · 6 评论 -
RocketMQ基于Dledger模式,平滑升级操作
前置条件该方案并非所有case通用,其它部署模型仅供参考。集群模式:多主多从(比如,2主4从) 支持主从切换:Dleader,不支持也可参考,满足上一条要求 发送端与消费端在进行broker升级的过程中(broker重启),要求客户端不允许出现errror日志场景broker重启时,客户端不允许出现ERROR级别的日志。broker重启,可能导致客户端报错,大概有以下情况:1. producer发送消息失败(路由信息未及时更新,已停止的broker会连接失败)2. consum原创 2021-01-09 23:08:36 · 618 阅读 · 0 评论 -
MAC电脑RocketMQ发送客户端启动后发送第一条消息老是报sendDefaultImpl call timeout???
前言之前,有业务侧同学第一次在自己项目上集成RocketMQ时,在自己电脑上测试的时候,一发送消息就报错sendDefaultImpl call timeout,然后反馈过来看是什么原因,我仔细查了下原因,结果很讶异,过程也很有趣,就顺便记录下发现的过程和原因。环境RocketMQ4.7.1java版本消息发送客户端现象启动发送端,发送消息,报错:过程当时看到这个异常的第一反应是:他是不是在压测或者是网络问题,然后确认了下,没有压测,就是在自己电脑上发条消息试下。查看了下原创 2020-12-19 20:53:03 · 1134 阅读 · 6 评论 -
RocketMQ的broker处理消息commit时,加锁应该使用自旋锁还是重入锁
讨论的主题以下内容基于rocketmq4.7.1版本。rocketmq的broker端关于消息发送的配置项中,有这样2项配置:1. 是否使用重入锁 /** * introduced since 4.0.x. Determine whether to use mutex reentrantLock when putting message.<br/> * By default it is set to false indicating using spi原创 2020-12-13 23:58:29 · 1311 阅读 · 4 评论 -
RocketMQ无聊的细节之磁盘空间使用比为什么是-1
背景环境linux系统RocketMQ Dledger集群模式RocketMQ 4.7.1版本现象执行mqadmin clusterList 查看集群列表,磁盘空间使用率为-1原因跟源码看下这条命令的执行流程,不是来分析源码的,所以源码细节忽略,有兴趣,直接根据下面的提示查看源码,源码也比较直白,看起来很简单:1.从MQAdminStartup类的initCommand()方法,找到这个命令的类:ClusterListSubCommand2.从ClusterL原创 2020-12-09 22:16:13 · 1030 阅读 · 1 评论 -
RocketMQ常用命令使用示例及说明
1. 前言本文主要为RocketMQ的大部分客户端运维命令的基本使用示例,文中使用的参数为最少必须参数,相关参数会有简单介绍。本文说明的命令基于RocketMQ的3.5.8版本,有些命令可能在更低版本中并不存在。运维命令脚本放在bin目录下。本文使用的测试集群为2m-noslave集群。笔者会尽量把大部分的命令举例说明,但是每个命令的具体参数说明,请通过--help查看或者查阅...原创 2018-05-20 22:24:28 · 11519 阅读 · 0 评论