- 博客(22)
- 收藏
- 关注
原创 如何阅读阿里系的开源作品的源码
从大四开始,一直保持着阅读源码的习惯,也一直都从事中间件相关领域的产品开发,对于如何阅读源码和如何快速选型也有自己的心得于体会。 下面着重讲讲如何阅读 RocketMQ 的源码。首先,我们需要知道 RocketMQ 是啥东西?消息中间件,仅仅是这样还不够的呢?阿里很多中间件产品都有自己的概念,我...
2018-08-04 16:37:03
698
原创 windows10 安装 Linux
参考的网站: http://jingyan.baidu.com/article/5552ef47ef0b87518ffbc935.html但这里有个问题了:在 windows 10 内部安装了 Linux ,怎么样才用 root 权限呢?哈哈!正确的打开姿势如下: 1、非root 用户 在 windows10 中,选择 <命令行输入符(c)> ,输入 bash 。进入 linux
2016-12-17 11:50:53
1005
原创 数据同步canal 疑点——内存
canal 内存实现的方式是环形数组,这个是非常高效的,可以减少内存分配,在堆栈中分配内存挺耗时间的。何况,如果不使用环形数组的话的,消息有点折扣,很多开源的项目有实现了类似的环形数组。 在公司的某一段时间,在日常批量更改时间,发现 canal 挂掉了,当初得到的原因是:内存消耗完毕,被 Linux 干掉了 canal 进程了。可以在 /var/logs 目录下,找找相应的文件就知道
2016-09-11 16:55:53
3876
原创 RocketMQ 的基础与规范
在公司里边,负责消息中间件这块工作,也进行了内部知识的交流。但效果不太明显呀!今天把一些 Rocketmq 的重要的知识点整理出来!Producer 消息生产者,负责产生消息,一般由业务系统负责产生消息。Consumer 消息消费者,负责消费消息,一般是后台系统负责异步消费。拉取后的消息,是放在线程池里面的。Pull Consumer Consumer 的一种,应用通常竹筒调用
2016-08-25 21:51:41
4071
原创 canal 数据同步的一个重要点
公司里边使用了 canal 这个开源产品,基于 mysql binlog 日志来抓取数据库的变更。然后把变更的数据通过 Rocketmq 发送到 solr 集群和大数据中心。但有一个疑问,基于 row 模式的 binlog 会不会记录变更前、变更后的值呢?答案:会!INSERT:只有变更后的值。 UPDATE:包含了变更前、变更后的值。 DELETE:变更前的值。哈哈哈!心头的疑问终于不再模糊啦
2016-08-24 22:55:42
2792
原创 mysql binlog 常用的命令
因为我在公司里面负责数据同步组件的相关工作,包括构建异地多活的工作,所以,需要先了解一下 MySQL binlog 的相关知识点。由于看过了好几遍了《高可用 MySQL 》 这本经典的书籍了,但还是不能记住一些 binlog 日志的命令,所以,这段时间,先整理一下。把旧债先还了。以后还会更新的啦!FLUSH LOGS 该命令强制轮换二进制日志,从而得到一个完整的 二进制日志文件。因为,每个二进
2016-08-24 22:50:37
660
原创 Rocketmq 文件名、msgId 生成规则
Rocketmq 的文件名的生成规则还是不错的。通过 offset 作为文件名。请看下图: UtilAll.offset2FileName(createOffset + this.mapedFileSize); 其中,mapedFileSize 的大小是可以配置的。 msgId 生成规则如下的截图所示: 为什么今天会提及这两个小家伙呢?今天忘记了 offset 的命名规则了。还可以 判断
2016-08-23 21:22:42
3189
原创 Rocketmq 消息的解压缩
虽然 RocketMQ 没有 kafka 的批量发送的功能。但在发送消息的时候,如果消息大小超过了 128k ,这条消息是不允许发送的。但如果消息 大小超过了 4k,那么,这条消息将会被压缩。 校验工作的方法: Validators.checkMessage(msg, this.defaultMQProducer); 如果消息大小 大于 4k,那么,这条
2016-08-23 21:01:07
3846
2
原创 RocketMQ 消费进度
Rocketmq 拉取消息的时候,可能会保存消费进度的哦!且看一下的截图 因为拉取到的消息后,消费进度先刷 内存的。之后,由定时任务推送到 broker 端的。如果是 集群模式,消费进度都是保存在 broker 端的。 这里设置了标志位,这种方式非常聪明,减少了协议的头部的大小通过这 3 张截图,我们可以大致了解到。consumer 处理第一次消费这个队列的数据外,第二次之后,broker
2016-08-22 23:51:41
2764
原创 RocketMQ 发送消息疑问
我们都知道 rocketmq 发送消息有 3 中方式: 1、同步 同步发送消息,是可以拿到消息结果的, 2、oneway 方式 这种方式最适合发送日志啦,比如,最求速度的。可以采取这种方式。3、异步 这种方式有点误解了,其实这个也是返回结果的。 可以从第二种截图中看出,这里需要实现回调接口的。其实呢,不管是同步
2016-08-22 22:27:09
3392
原创 rockemtq 高可靠消息探究
RocketMQ 是基于内存方式保存消息,然后再刷硬盘的。如果我们想发送可靠的消息,哪些,有两种方式: 1、sendMessageWithVIPChannel 是否走 VIP 快速通道。 这个可以减少消息的丢失率。加快刷到硬盘的速度。这个通道很少生产者走的。所以,保证了消息稳定地到达了 broker 端,特别是 当 洪水般的消息涌过来的话,对于 金钱方面的消息,这个通道非常快速。
2016-08-22 21:59:32
640
原创 RocketMQ-- 建议去 slave 拉取消息
在 RocketMQ 中,虽然消息先存放在内存中,在刷到硬盘中。但又可能消息已经落在了 硬盘中,导致了消费端去硬盘中中拉取消息,造就了 IO 过高的现象。但又一个几个参数我们是可以做调整的。参数列表如下: 当然啦。这几个参数的值我们是可以调整的。但我觉得,还是默认比较好。但这几个参数的相关使用在哪里呢?请看下面的截图: 注意啦!在 rocketmq 中,offset 增加 1 ,就表示 增加一个
2016-08-22 21:27:56
2339
原创 sublimetext3中pachage control的安装
关于 GO 语句集成环境的开发中。大伙可以模仿其他文章的。但 pachage control的安装因为 sublime 的版本不相同输入的内容不相同。使用快捷键ctrl+`(反引号,tab键上面的那个)打开安装窗口sublime 3 的版本 import urllib.request,os,hashlib; h = ‘2915d1851351e5ee549c20394736b442’ + ‘8
2016-08-06 20:44:59
674
原创 RocketMQ 高性能存储
转载:http://blog.youkuaiyun.com/fcbayernmunchen/article/details/8635427Java类库中的NIO包相对于IO 包来说有一个新功能是内存映射文件,日常编程中并不是经常用到,但是在处理大文件时是比较理想的提高效率的手段。本文我主要想结合操作系统中(OS)相关方面的知识介绍一下原理。在传统的文件IO操作中,我们都是调用操作系统提供的底层标准IO系统调用函
2016-08-06 16:51:27
1960
原创 java 虚拟机之 boolean 类型
在一个开源项目中,看到如下的代码,思索了一会,大悟: boolean hasHeartBeat = false; hasHeartBeat |= (entry.getEntryType() == EntryType.HEARTBEAT); 这段代码就是 比较两者的类型是否相等; 但为何这样设计呢?因为这样做,效率是杠杠的! 其深处原因在于:Java 虚拟机中没有提供 boole
2016-05-15 21:37:06
449
原创 canal client -->canal server 的交互过程
canal 是阿里开源的 MySQL 数据同步工具,漂亮!赞一个! 客户端的代码: 服务端的解码过程,FixedHeaderFrameDecoder 这个类负责解码过程: 为什么是这样设计的呢?是不是和我们平时使用 Netty 的编解码器不太一样呢?主要有以下几点原因: 1、canal client 是轻量级的 Java NIO 方式实现,而 canal server 是 Netty 方式实
2016-05-14 22:55:43
4237
原创 数据同步 canal
在公司负责中间件一段时间了!对于作为应届生的我,非常荣幸!谢谢!下面将全面分析 canal 运行的内部机制!同时,我整理的笔记,将放在 GitHub 上面!大概一个月之后吧!有点乱!感谢开源!还是阿里好!哈哈哈!!!
2016-05-04 00:14:21
814
原创 canal 启动分析
在对canal 一切准备妥当后,然后 sh startup.sh 后,流程图如下: 应该是这样的啦! 那源码是怎么得呢? 这个是我源码整理的理解!勿喷! 大伙如果一开始开源码的话,如果忽略了脚本,那就不好了!就不知道配置文件怎么加载的啦!且看脚本是怎么定义配置文件是如何加载的吧! 可能细心的伙伴会观察到 配置文件也有可能从 CLASSPATH: 路径下加载,因为 canal 可以独
2016-05-03 23:59:32
3196
原创 StartUML 注册
StartUML 安装完毕后,先别着急着打开 1、找到安装目录。比如:C:\Program Files (x86)\StarUML\www\license\node2、打开 LicenseManagerDomain.js 3、在 try 模块 前面加上 如下的代码块,并保存。return{ name:"0xcb", product:"StarUM
2016-05-03 21:44:18
1011
原创 jps -- java 进程查看命令
如果我们想查看某个进程的 JVM 配置信息 或者其加载的配置文件的全路径。可能我们用最笨的方法去瞧瞧!如果说 jps 命令就能够查看上面的信息的话,是不是有点小惊讶嘞! - jps 或者(sudo jps) 只是显示了 java 进程PID 及 类名在平时,以上就是我们的对 jps 的使用了。但其超级强大,但我们却忽略了一下功能。jps -m 加上
2016-04-30 18:11:33
1266
原创 RocketMQ 的疑惑--131072 数字解答
今天又时间看看 Rocketmq 的源码。发现一个有趣的数字:131072=(2^10) * (2^7) =128 k 在 Rocketmq 中。设置数字非常有意思: 1、在 Netty 中设置 Socket 的接收、发送的缓存区大小 2、在发送消息的时候,校验该消息的大小 为什么需要这样设置呢?为什么需要控制消息的大小呢? 因为在 TCP 协议中其 socket接收缓冲的内存的默认值是
2016-04-10 13:43:18
1839
原创 技术路线的思考
这段时间都在想,路在哪里!今天想了想!我觉得走中间件的方向,虽然这个方向有点苦,但没事!因此,我觉得每 3 个月作为一个大的步骤,一个星期作为一个小的步骤!一步步完成自己的目标! 为什么我想在急于在一个点上深度学习呢?因为,,随着工作年龄的增加,技术也越来越广,其实也就是接触一下皮毛,了解一下。但深入需要自己去琢磨! 以前在学校浪费了很多时间,这个学学,那个学学,都是最基本的;恩师对我说
2016-03-13 13:24:31
539
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人