Jafka

Jafka源码粗略解读之二--关于JMX

只愿长相守 提交于 2019-12-05 04:05:05
JMX Jafka里用到了JMX,之前也没用过,迅速突击了一下,感觉还是挺简单的: 有一篇文章用一个例子介绍JMX怎么使用的,简洁明了: http://www.javalobby.org/java/forums/t49130.html 。就是声明一个bean,然后在MBeanServer中加入这个bean: ApplicationCache cache = new ApplicationCache(); MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ObjectName name = new ObjectName("org.javalobby.tnt.jmx:type=ApplicationCacheMBean"); mbs.registerMBean(cache, name); 这里ApplicationCache是个POJO,特殊的是它必须实现一个名为*MBean的接口。至此,一个JMX调用就完成了。在JConsole里连接,会找到对应方法。貌似setter和getter会被打包反射成一个field,其他都是方法调用。 JMX的设计倒是非常符合Java OO的思想,使用也还算简洁,是个好东西。结构说明: http://pub.admc.com/howtos/jmx/architecture-chapt

Jafka源码粗略解读之四-log及其他

房东的猫 提交于 2019-12-05 04:04:54
这几天琢磨其他的东西,Jafka源码搁置了,对其解读已经失去了兴趣。为了给自己一个交代,还是写个结尾系列吧。 log Log模块并非是log4j一套,而是Jafka的 消息持久化系统 ,当初一扫而过,这么精华的部分竟然没注意到。 不过所谓O(1)的持久化效率而并非多么复杂,其实就是在offset处append而已。这个最重要的部分,现在算是弄清楚了。 剩余部分都没有仔细读过源码,有些是从 rockybean 的博客中直接看的。 Jafka对NIO这块的使用,相当值得参考和借鉴。不过对一些细节的处理,只有自己真正开发相关功能才能体会,于是决定先搁置了。 关于MetaQ MetaQ据说是淘宝内部的MQ,在Kafka上做了改进,可以看成跟Jafka同源。clone了一份MetaQ的代码, https://github.com/killme2008/Metamorphosis ,粗略看了一下,看得出来是公司级别的开发,并非为开源而生,所以精细程度不如Jafka(指代码级别的技巧),但是各种接口定义要更清晰一点。 找了MetaQ的文档,对于MQ的特性和问题,做了一些总结,好好读了一遍: http://alibaba.github.io/metaq/document/design/design.pdf 有几个东西,确实是实践出真知: 关于MQ的优先级 MetaQ支持在内存中排序

Jafka源码粗略解读之三-producer

故事扮演 提交于 2019-12-04 03:19:31
资料 今天看到研究Jafka的人还挺多的,比较优秀的是@FrankHui的 Kafka系列文章 ,还有@rockybean 的 博客 。这两个博客都写的很详细,条理清晰,图文并茂,比起我这种走马观花,笔记式的记录要好得多了。 不过其实读源码每个人侧重点都不同,我还是继续记录我的。 作为一个实用主义者,我觉得读源码有几种目的: 实际使用到该项目,想要弄清其原理,乃至于需要做定制化的 想要学习其设计方法、架构思想的 想要学习到一些代码实现上的技巧 因为项目中也没有用到Jafka,而是公司内部基于mongodb和netty写的一个MQ,其实我倒是更倾向于3和2,然后再带着想法回头改进自己的。既然已经写了是粗略解读,倒是不怕人指责了。 代码 Producer的入口可以看 ProducerTest 类。 根据配置,send()可以使用sync和async方式。 BlockingChannel 是封装了网络连接的类,底层是NIO的 SocketChannel 。 这里颇有意思的是 BlockingChannel 的 send 方法: <!-- lang: java --> public int send(BoundedByteBufferSend bufferSend) throws IOException { if (!isConnected()) { throw new