Kafka 源码解析之 Server 端如何处理 Produce 请求(十二)

这部分想了很久应该怎么去写才能更容易让大家明白,本来是计划先把 Kafka 存储层 Log 这块的写操作处理流程先详细介绍一下,但是这块属于比较底层的部分,大家可能对于这部分在整个处理过程处在哪个位置并不是很清楚,所以还是准备以 Server 端如何处理 Producer Client 的 Produce 请求为入口。但是 Server 端的内容较多,本篇文章并不能全部涵盖,涉及到其他内容,在本篇文章暂时先不详细讲述,后面会再分析,本篇文章会以 Server 处理 produce 为主线,主要详细讲解 Kafka 存储层的内容。

阅读更多

Kafka 源码解析之日志管理(十一)

上篇文章在介绍完 Kafka 的 GroupCoordinator 之后,下面开始介绍 Kafka 存储层的内容,也就是 Kafka Server 端 Log 部分的内容,Log 部分是 Kafka 比较底层的代码,日志的读写、分段、清理和管理都是在这一部分完成的,内容还是比较多的,会分为三篇左右的文章介绍,本篇先介绍最简单的部分,主要是日志的基本概念、日志管理、日志刷新和日志清理四部分(后两个其实也属于日志管理,为便于讲解,这里分开讲述),日志的读写和分段将在下一篇讲述。

阅读更多

操作系统之共享对象学习

在 Kafka 的存储层这部分代码时,看到了很多地方使用操作系统的共享内存机制,Kafka 中所有日志文件的索引都是使用了 mmap 做内存映射,mmap 这块刚好也是一个值得深入学习的知识点,于是就就深入地看了一下、做了一下总结,本文的内容主要来自《深入理解操作系统》第三版 9.8 存储器映射部分。

阅读更多

Kafka 源码解析之 GroupCoordinator 详解(十)

突然发现距离上一篇文章,已经过去两个多月了,有两个月没有写博客了,之前定的是年前把这个系列写完,现在看来只能往后拖了,后面估计还有五篇文章左右,尽量在春节前完成吧。继续之前的内容开始讲解,这篇文章,主要是想把 GroupCoordinator 的内容总结一下,也算是开始了 Kafka Server 端的讲解,Kafka 的 Server 端主要有三块内容:GroupCoordinator、Controller 和 ReplicaManager,其中,GroupCoordinator 的内容是与 Consumer 端紧密结合在一起的,有一部分内容在前面已经断断续续介绍过,这里会做一个总结。

阅读更多

自我救赎

今天是第三次刷《肖生克的救赎》,记得第一次看的时候应该是在大学,具体是哪一年级,已经忘记了,第二次看的时候隐隐约约记得应该是假期在家的时候看的。这部电影就是让人有一种:心里不爽的时候,刷一遍就豁然开朗。如果你真正投入其中,这部电影可能会引起你得共鸣。触及你内心的深处,它会让你思考:

阅读更多

Kafka 源码解析之 Consumer 两种 commit 机制和 partition 分配机制(九)

紧接着上篇文章,这篇文章讲述 Consumer 提供的两种 commit 机制和两种 partition 分配机制,具体如何使用是需要用户结合具体的场景进行选择,本文讲述一下其底层实现。

阅读更多

Kafka 源码解析之 Consumer 两种订阅模式(八)

在前面两篇 Kafka Consumer 的文章中,Consumer Poll 模型这部分基本上已经完整结束,Consumer 这块的文章计划是要写五篇,这篇是 Consumer 这块的第三篇,本来计划是要从其中的三个小块细节内容着手,这三个地方有一个相同之处,那就是在 Kafka Consumer 中都提供了两个不同的解决方案,但具体怎么去使用是需要用户根据自己的业务场景去配置,这里会讲述其底层的具体实现(但为了阅读得更为方便,本来计划的这篇文章将拆分为两篇来,第一篇先讲述第一点,后面两点放在一起讲述)。

阅读更多

Kafka 源码解析之 Consumer Poll 模型(七)

在上一篇问文章中已经介绍一个 Consumer 实例如何加入到一个 group 中,它是 Consumer Poll 模型第一步要做的事件,本文会完整讲述一个 Consumer 实例在 poll 模型过程中会做哪些事情,只有理解了 poll 模型才能更好地理解 Consumer 端的处理逻辑。

阅读更多

Kafka 源码解析之 Consumer 如何加入一个 Group(六)

距离上一篇博客(2017-09-10),到现在已经过去一个多月了,理论上这篇文章在上个月就应该写完,无奈拖延症又犯了,一直以这部分过于复杂为借口拖了好久,这两天逼了自己一把,先整理出其中的一篇,后续要加把劲,要不然今年的年度计划(年底前把这个系列写完)就完不成了,废话到此为止,下面步入正文。在 Kafka 中,Consumer 的复杂度要比 producer 高出很多,对于 Producer 而言,没有 producer 组的概念的、也不需要 care offset 等问题,而 Consumer 就不一样了,它需要关注的内容很多,需要考虑分布式消费(Consumer Group),为了防止重复消费或者部分数据未消费需要考虑 offset,这些都对 Consumer 的设计以及 Server 对其处理提出了很高的要求。本来计划是先进行综述,然后再分别介绍各个模块,现在打算反过来,先介绍各个模块,最后再进行综述,本篇为 Consumer 源码分析开篇,先从一个 Consumer 实例如何加入一个 Consumer Group 讲起。

阅读更多

Kafka 源码解析之 Producer 单 Partition 顺序性实现及配置说明(五)

今天把 Kafka Producer 最后一部分给讲述一下,Producer 大部分内容都已经在前面几篇文章介绍过了,这里简单做个收尾,但并不是对前面的总结,本文从两块来讲述:RecordAccumulator 类的实现、Kafka Producer 如何保证其顺序性以及 Kafka Producer 的配置说明,每个 Producer 线程都会有一个 RecordAccumulator 对象,它负责缓存要发送 RecordBatch、记录发送的状态并且进行相应的处理,这里会详细讲述 Kafka Producer 如何保证单 Partition 的有序性。最后,简单介绍一下 Producer 的参数配置说明,只有正确地理解 Producer 相关的配置参数,才能更好地使用 Producer,发挥其相应的作用。

阅读更多

Kafka 最佳实践【译】

这里翻译一篇关于 Kafka 实践的文章,内容来自 DataWorks Summit/Hadoop Summit(Hadoop Summit)上一篇分享,PPT 见Apache Kafka Best Pratices,里面讲述了很多关于 Kafka 配置、监控、优化的内容,绝对是在实践中总结出的精华,有很大的借鉴参考意义,本文主要是根据 PPT 的内容进行翻译及适当补充。

阅读更多

Kafka 源码解析之 Producer NIO 网络模型(四)

本文是 Kafka 源码解析的第四篇,在写这篇文章之前,专门看了一下 Java NIO 相关的内容,只有理解了 Java NIO 模型才能更好地理解 NIO 在 Kafka 中是如何应用的以及 Producer 如何利用 Java NIO 构建其网络模型(不了解的,可以先看一下上一篇文章:谈一谈 Java IO 模型),同时,本文也是对 Producer 整个流程的一个总结,主要讲述以下两个问题:

阅读更多

谈一谈 Java IO 模型

Java IO 模型对于 Java 开发工程师来说,是日常工作中经常接触的内容,特别是随着分布式系统的兴起,IO 也显得越来越重要,Java 的 IO 模型本质上还是利用操作系统提供的接口来实现,不熟悉这一部分内容的话,可以先看一下上篇文章Unix 网络 IO 模型及 Linux 的 IO 多路复用模型,本文跟上篇的内容是紧密相连的,特别是本文的重点 —— Java NIO 部分,其底层原理就是 UNIX 的 IO 多路复用,IO 多路复用在上篇文章中讲述了很多。

阅读更多

Unix 网络 IO 模型及 Linux 的 IO 多路复用模型

近段在看 Kafka 的网络模型时,遇到了很多 Java NIO 的内容,在学习 Java NIO 的过程中,发现需要把 UNIX 的这几种网络 IO 模型以及 Linux 的 IO 多路复用理解清楚,才能更好地理解 Java NIO,本文就是在学习 UNIX 的五种网络 IO 模型以及 Linux IO 多路复用模型后,做的一篇总结。

阅读更多

Kafka 源码解析之 topic 创建过程(三)

本文是 Kafka 源码解析的第三篇,主要讲述一个 topic 的创建过程,从 topic 是如何创建到 topic 真正创建成功的中间详细过程,文章主要内容可以分为以下几个部分:

阅读更多

Linux 常用的一些系统命令

文章的内容,基本来自每日一个 linux 命令,选取了几个在工作常用的命令,有:top、iostat、netstat 、free 和 ps,本文的主要目的是在学习这几条命令的过程中,简单做一些记录,便于日后工作中更加熟练地使用这些命令。

阅读更多

Kafka 源码解析之 Producer Metadata 更新机制(二)

在上一篇文章中,已经介绍了 Producer 的发送模型,Producer dosend() 方法中的第一步,就是获取相关的 topic 的 metadata,但在上篇中并没有深入展开,因为这部分的内容比较多,所以本文单独一篇文章进行介绍,本文主要来讲述以下三个问题:

阅读更多

买房感想

落户+买房的事情终于搞定得差不多了(就差贷款合同的签署),六月份这个月已经往来杭州3趟,从四月底开始看房到现在,这一路真是五味杂粮、感慨颇多,亲身地感觉到生活之不易,无忧无虑的生活从离开大学的那一刻开始就已经结束,读研这两年半看似浑浑噩噩,但早已没有大学时的那种轻松惬意,或许这就是成长。

阅读更多

Kafka 源码解析之 Producer 发送模型(一)

早就开始计划写 Kafka 源码分析的文章,但却一直迟迟没有动手,直到看到一位同事的博客 编程小梦,彻底受到了打击,这位同事是去年本科毕业,年龄算起来应该比我小两岁,但是非常厉害,在刚工作半年的时候就成为了 Apache Kylin 的 commiter,看到身边同事这么优秀,而且还这么努力 (编程小梦-我的书单),自己实在没有理由不努力了,因此,在 github 上给自己提了一个 issue Kafka 源码分析系列,希望自己能够在未来半年里,至少每两周输出一篇 Kafka 源码分析的文章,本文是这个系列的第一篇 —— Producer 的发送模型(以 Kafka 0.10.2 为例)。

阅读更多

CSS 一些常用方法的总结

CSS 指的是层叠样式表(Cascading StyleSheet),在网页制作时采用层叠样式表技术,可以有效地对页面的布局、字体、颜色、背景和其它效果实现更加精确的控制,本文对 css 一些基本内容及常用功能进行一下总结,总结的内容主要是来自实验楼的 CSS 速成教程,这篇文章会实时更新,后续如果遇到什么好的有用功能,也会更新到这篇文章中。

阅读更多