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 速成教程,这篇文章会实时更新,后续如果遇到什么好的有用功能,也会更新到这篇文章中。

阅读更多

HTML 一些常用方法的总结

HTML 是一种语言,是用来描述网页的语言,它是一种标记语言,HTML 就是使用标记标签来描述网页。

阅读更多

入职培训感想

这周参加了公司的封闭式入职培训,总共是五天的时间,今年是公司第一次进行校招封闭式培训。记得去年七月份来公司实习,一起入职的校招同事参加的入职培训才两天时间,而且也不是封闭式的,一年的时间,变化还是很大的,这也间接证明公司的发展速度很快。作为公司第一届参加封闭式入职培训的员工(不是这届的第一批),在这五天中明显感觉到了收获了很多,这里记录总结一下。

阅读更多

腾讯传,一个激情澎湃的时代

这两周把《腾讯传》看完了,这本书去年出版的时候就想去看,但是一拖就拖到了现在,直到上周出去玩,回来的时候路上遇到了堵车,车上实在无聊,就开始看这本书。我平时是比较喜欢看这类科技史或科技公司史的书,第一次看这种类型的书,读的吴军老师的《浪潮之巅》,当时真叫是一个过瘾,至今还记得当时那种情景 —— 怎一个爽字了得,一口气连着两天在图书馆把这本书看完了。可是现在在看《腾讯传》时,已经没有了那种感觉,但最后还是在两周的时间里把这本书看完了,跟着吴晓波一起重温了一个伟大互联网公司(3Q 之后的腾讯)发展历程 —— 一个激情澎湃的时代。

阅读更多

欧洲简史

最近几周把这本你一定爱读的极简欧洲史读完了,在阅读的过程中,感觉真的是很爽,不愧是豆瓣的8+分图书。读完本书,可以对欧洲的历史有一个大概的了解,即便是最后很多的细节记不清楚,但是整个历史过程还是会有一定的印象,能建立一个大概的时间线。读完本书,如果再有人问你为什么现代科学、政治制度会诞生在西方,而不是一直领先的中国?你应该也能说几个理由的。

阅读更多

Storm 对 0.10.x 版 Kafka 支持解析

由于 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 之 Group 状态变化分析及 Rebalance 过程

前段时间看一下 Kafka 的部分源码(0.10.1.0 版),对一些地方做了一些相应的总结。本文主要就 Kafka Group 方面的内容做一下详细的讲述,重点讲述 Consumer Client 如何进行初始化、Server 端对应的 Consumer Group 状态如何进行变化以及对一些 Kafka 的新设计(与旧版不同之处)简单介绍一下。

阅读更多