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支持在内存中排序,但是放弃了磁盘系统的排序。

  • 关于重复消费(Exactly And Only Once)

    保证送达,不保证不重复,而在业务中判断重复,消息消费具有幂等性。

MetaQ在消息回溯时,使用了时间做offset。时间真是个好东西,分布式的排序和一致性,靠这个省了好多事。twitter的UUID服务Snowflake也用到了这个玩意,我在做邮件调度的时候也用到了这个东西,实在是好用得很。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!