Kafka 源码解析之 Producer NIO 网络模型(四)
本文是 Kafka 源码解析的第四篇,在写这篇文章之前,专门看了一下 Java NIO 相关的内容,只有理解了 Java NIO 模型才能更好地理解 NIO 在 Kafka 中是如何应用的以及 Producer 如何利用 Java NIO 构建其网络模型(不了解的,可以先看一下上一篇文章:谈一谈 Java IO 模型),同时,本文也是对 Producer 整个流程的一个总结,主要讲述以下两个问题:
本文是 Kafka 源码解析的第四篇,在写这篇文章之前,专门看了一下 Java NIO 相关的内容,只有理解了 Java NIO 模型才能更好地理解 NIO 在 Kafka 中是如何应用的以及 Producer 如何利用 Java NIO 构建其网络模型(不了解的,可以先看一下上一篇文章:谈一谈 Java IO 模型),同时,本文也是对 Producer 整个流程的一个总结,主要讲述以下两个问题:
Java IO 模型对于 Java 开发工程师来说,是日常工作中经常接触的内容,特别是随着分布式系统的兴起,IO 也显得越来越重要,Java 的 IO 模型本质上还是利用操作系统提供的接口来实现,不熟悉这一部分内容的话,可以先看一下上篇文章Unix 网络 IO 模型及 Linux 的 IO 多路复用模型,本文跟上篇的内容是紧密相连的,特别是本文的重点 —— Java NIO 部分,其底层原理就是 UNIX 的 IO 多路复用,IO 多路复用在上篇文章中讲述了很多。
近段在看 Kafka 的网络模型时,遇到了很多 Java NIO 的内容,在学习 Java NIO 的过程中,发现需要把 UNIX 的这几种网络 IO 模型以及 Linux 的 IO 多路复用理解清楚,才能更好地理解 Java NIO,本文就是在学习 UNIX 的五种网络 IO 模型以及 Linux IO 多路复用模型后,做的一篇总结。
本文是 Kafka 源码解析的第三篇,主要讲述一个 topic 的创建过程,从 topic 是如何创建到 topic 真正创建成功的中间详细过程,文章主要内容可以分为以下几个部分:
文章的内容,基本来自每日一个 linux 命令,选取了几个在工作常用的命令,有:top、iostat、netstat 、free 和 ps,本文的主要目的是在学习这几条命令的过程中,简单做一些记录,便于日后工作中更加熟练地使用这些命令。
在上一篇文章中,已经介绍了 Producer 的发送模型,Producer dosend() 方法中的第一步,就是获取相关的 topic 的 metadata,但在上篇中并没有深入展开,因为这部分的内容比较多,所以本文单独一篇文章进行介绍,本文主要来讲述以下三个问题:
落户+买房的事情终于搞定得差不多了(就差贷款合同的签署),六月份这个月已经往来杭州3趟,从四月底开始看房到现在,这一路真是五味杂粮、感慨颇多,亲身地感觉到生活之不易,无忧无虑的生活从离开大学的那一刻开始就已经结束,读研这两年半看似浑浑噩噩,但早已没有大学时的那种轻松惬意,或许这就是成长。
早就开始计划写 Kafka 源码分析的文章,但却一直迟迟没有动手,直到看到一位同事的博客 编程小梦,彻底受到了打击,这位同事是去年本科毕业,年龄算起来应该比我小两岁,但是非常厉害,在刚工作半年的时候就成为了 Apache Kylin 的 commiter,看到身边同事这么优秀,而且还这么努力 (编程小梦-我的书单),自己实在没有理由不努力了,因此,在 github 上给自己提了一个 issue Kafka 源码分析系列,希望自己能够在未来半年里,至少每两周输出一篇 Kafka 源码分析的文章,本文是这个系列的第一篇 —— Producer 的发送模型(以 Kafka 0.10.2 为例)。
CSS 指的是层叠样式表(Cascading StyleSheet),在网页制作时采用层叠样式表技术,可以有效地对页面的布局、字体、颜色、背景和其它效果实现更加精确的控制,本文对 css 一些基本内容及常用功能进行一下总结,总结的内容主要是来自实验楼的 CSS 速成教程,这篇文章会实时更新,后续如果遇到什么好的有用功能,也会更新到这篇文章中。
这周参加了公司的封闭式入职培训,总共是五天的时间,今年是公司第一次进行校招封闭式培训。记得去年七月份来公司实习,一起入职的校招同事参加的入职培训才两天时间,而且也不是封闭式的,一年的时间,变化还是很大的,这也间接证明公司的发展速度很快。作为公司第一届参加封闭式入职培训的员工(不是这届的第一批),在这五天中明显感觉到了收获了很多,这里记录总结一下。
最近几周把这本你一定爱读的极简欧洲史读完了,在阅读的过程中,感觉真的是很爽,不愧是豆瓣的8+分图书。读完本书,可以对欧洲的历史有一个大概的了解,即便是最后很多的细节记不清楚,但是整个历史过程还是会有一定的印象,能建立一个大概的时间线。读完本书,如果再有人问你为什么现代科学、政治制度会诞生在西方,而不是一直领先的中国?你应该也能说几个理由的。
由于 0.10.x 版 Kafka 与 0.8.x 版有很大的变化,这种变化对下游 Storm 有非常大的影响,0.10.x 版的 Kafka 不但增加了权限管理的功能,而且还将 simple 和 high consumer 的 offsets 进行统一管理,也就意味着在 0.8.x 中 Storm 需要去负责管理 offsets,而在 0.10.x 中,Storm 不需要关心 consumer 的 offsets 的问题,这对 KafkaSpout 的设计有很大的影响,本文就是对 Storm 对 0.10.x 版 Kafka 支持的实现部分的解析。
前段时间看一下 Kafka 的部分源码(0.10.1.0 版),对一些地方做了一些相应的总结。本文主要就 Kafka Group 方面的内容做一下详细的讲述,重点讲述 Consumer Client 如何进行初始化、Server 端对应的 Consumer Group 状态如何进行变化以及对一些 Kafka 的新设计(与旧版不同之处)简单介绍一下。
花了两周多的时间把钱穆老先生这部神作读完了,读完之后的感觉是,书中有太多的观点让我有醍醐灌顶之感,钱老读史思考的深度远非常人所及,这本书非常值得拜读,豆瓣上也同样给出了9分以上评价,真的名不虚传(《中国历代政治得失》)。因为这本书并不是一气看完,大部分是在上下班的班车上看的,每天看一部分,持续半个月之后才看完,所以书中一些感觉很不错的观点到现在可能已经忘了一部分,现在回忆起整本书,大概有三点让我印象非常深刻,下面也会就这三点讲述一下。
如果在 Java 应用中对 Exception 能够正确处理,那么将会使你的程序更具有健壮性。但是很多人对 Exception 中的 Checked Exception 和 Unchecked Exception 并不理解,并且 Exception 又常常被被分为 JVM Exception 和程序 Exception,这就让一些开发者显得更加困惑了,本文就这几个概念详细讲述一下。(本文翻译自Checked and Unchecked Exceptions in Java)
Vim 到目前位置也用了将近两年,但是很多的快捷键每次要用到的时候还是会 Google 一下,只能记住很少的命令,查的过程其实还是会浪费很多时间,这里总结一下一些常用的 Vim 命令,以便以后查看。
本文是关于技巧这本书的读书笔记。这本书是作者根据自己的生活学习经历悟出的一些方法论,满满的正能力,但有不同于一般的鸡汤文,书中提到的那些技巧,其实每个人都可以做到,但实际上却很少有人做到,正如作者所说因为别人都睡着,你醒着那么你就是杰出的。方法其实还是那种最简单的方法,简要来说就是行动+坚持,这也是最难的方法,因为坚持是最难的。用这种方法达到自己想要效果的人就认为这种方法非常有用,就如作者学习英语一样,而对于大多数那些坚持不下去的人来说,他们感觉这就是在扯犊子,正所谓方法因人而异。如果一味地去追求 XX 天精通 XX,其实最后的结果只会是从入门到放弃。