本书是涵盖Apache Kafka各方面的具有实践指导意义的工具书和参考书。作者结合典型的使用场景,对Kafka整个技术体系进行了较为全面的讲解,以便读者能够举一反三,直接应用于实践。同时,本书还对Kafka的设计原理及其流式处理组件进行了较深入的探讨,并给出了翔实的案例。
本书共分为10章:第1章全面介绍消息引擎系统以及Kafka的基本概念与特性,快速带领读者走进Kafka的世界;第2章简要回顾了Apache Kafka的发展历史;第3章详细介绍了Kafka集群环境的搭建;第4、5章深入探讨了Kafka客户端的使用方法;第6章带领读者一览Kafka内部设计原理;第7~9章以实例的方式讲解了Kafka集群的管理、监控与调优;第10章介绍了Kafka新引入的流式处理组件。
基于Apache Kafka 1.0.0版本进行介绍,Kafka Contributor执笔。包括Kafka基本概念与特性,以及Kafka的部署、开发、运营、监控、调试、优化以及重要组件的设计原理,并给出了翔实的案例。
前言
2011年年初,美国领英公司(LinkedIn)开源了一款基础架构软件,以奥地利作家弗兰兹?卡夫卡(Franz Kafka)的名字命名,之后LinkedIn将其贡献给Apache基金会,随后该软件于2012年10月成功完成孵化并顺利晋升为Apache顶级项目——这便是大名鼎鼎的Apache Kafka。历经7年发展,2017年11月,Apache Kafka正式演进到1.0时代,本书就是基于1.0.0版本来展开介绍Kafka的设计原理与实战的。
背景
这是一个最好的大数据时代,这是一个最坏的大数据时代!
很抱歉,我使用了这句改编后的狄更斯名言作为开头,我想没有谁会质疑“当今是大数据时代”这个论点。今年(2018年)两会上李克强总理所做的政府工作报告中多次提及大数据等关键词,这已然是“大数据”第5次被写入政府工作报告了。具体到大数据行业内,各种各样的大数据产业方兴未艾,其中在实时流式处理领域涌现出大量的技术与框架,令技术人员们应接不暇。实时流式处理系统在克服了传统批处理系统延时方面的固有缺陷的同时,还摆脱了设计上的桎梏,实现了“梦寐以求”的正确性。可以说,对于流式处理从业人员来说,这正是摩拳擦掌、大展宏图的最好时代。
与此同时,我们也清醒地意识到当今大数据领域内的细分越来越精细化。不必说日渐火爆的人工智能和机器学习潮流引诱着我们改弦易辙,也不必说那些纷繁复杂的技术框架令人眼花缭乱,单是静下心来沉淀所学、思考方向的片刻时光于我们这些从业者来说都已显得弥足珍贵。我们仿佛在黑暗密林中徘徊,试图找出那条通往光明的“康庄大道”。每当发现了一条羊肠小路都好似救命稻草一般紧紧抓住。多年后我们回望那只不过是不断追逐热点罢了,在技术的海洋中我们迷失了前进的方向。从这个意义上说,这实在是一个糟糕的时代。
时光切回到4年前的某个下午,那时我正在做着Kafka的大数据项目。我突然发现与其盲目跟风各种技术趋势,何不精进手头的工作,把当前工作中用到的技术搞明白,于是我萌发了研究Kafka的想法。直到今天,我都无比庆幸那个午后做出的冲动决定,正如Adam Grant在《离经叛道》一书中所说:最正确的决定都是在冲动之下做出的。诚不欺我!
想要深入学习Kafka,不掌握Scala语言是不行的,毕竟Kafka就是使用Scala语言编写的。苦于当时没有合适的Scala中文书籍,我依稀记得找到了一本600多页的Scala原版书(Programming Scala Edition 2)进行学习。那段时间实在是难熬!不得不说,英文版书籍虽然内容翔实,但在表述上实在晦涩难懂,比如partially applied function和partial function两者的区别直至今天我都不是特别清晰,还是要不断地翻阅资料才能隐约记得它们之间的不同。庆幸的是,我没有半途而废,600多页的英文文档硬是啃了下来。对于Scala的初步掌握也让我觉得研究Kafka的时机到了。有意思的是,在之后通读Kafka的源码时我不禁大呼上当,Kafka的源码中只使用了最简单的函数式编程,我有些后悔自己花了那么多时间去学习Scala的函数式编程,当然这是后话。
既然是研究Kafka,那么研读源码是必不可少的步骤。如果不分析源码,我们就无法定位问题发生的根本原因。实话实说,阅读别人源码的过程是痛苦的,因而在理解的过程中我走了不少弯路。为了记录阅读Kafka源码的心得,我努力为每个Kafka源码包撰写博客。现在翻看我之前的博客,大家还能看到那好似流水账一般的Kafka源码分析系列文章。
随着对源码的不断熟悉,我加入了Apache Kafka社区,希望贡献自己的微薄之力。时至今日,我依然记得当初发送邮件要求加入开发组时的惶恐,也记得第一次贡献代码时的惴惴不安;我记得为了研究某个Kafka bug,自己曾忘记吃中饭的执着,也记得自己被标记为“Kafka contributor”时的喜悦。在混迹社区的日子里,我逐渐认识了一些Kafka的committer们,比如Kafka PMC成员王国璋,国璋兄对于网上Kafka问题的权威解答令我受教良多,同时我也很感激他于百忙之中为本书写推荐语。还有Kafka的三位原作者之一的饶军(Rao Jun),几次问题交流让我看到了他霸气的决断能力以及对于疑难问题原因的毒辣分析。当然还有非常敬业的Ijuma,他是我见过的最勤劳的Kafka committer,没有之一。在编写本书的过程中,我都或多或少地得到过他们的帮助,再次表示衷心感谢。
由于对Kafka研究的日益深入,我终于有了写书的冲动。我希望通过把学到的知识和原理集中整理并书写成文字来帮助那些尚未接触Kafka的广大读者快速上手,降低他们学习使用Kafka的成本,于是有了今天这本《Apache Kafka实战》。借着写作本书的契机,我本人对Kafka的方方面面做了梳理,自觉收获良多。每当搞懂了一个以前未了解的机制时,心中的那种满足感和兴奋感至今都令人神往。在此,我深深地希望读者在阅读完本书后也能有这样的体会。
面向的读者
我衷心希望本书可以成为各行各业的大数据从业者使用消息队列甚至是进入流式处理领域内的“敲门砖”,也希望各大公司能够充分利用Kafka来实现自己的业务目标。
在编写本书的过程中,我阅读了大量的英文资料和源代码,试图通过自己的理解将Kafka的使用实战技巧深入浅出地呈现给广大读者。没错,我希望这本书给人的感觉是通俗易懂、深入浅出,从而方便引领读者快速进入Kafka学习的大门。
我本人维护了一个微信公众号(名为“大数据Kafka技术分享”),希望在该公众号中我能和读者朋友们一起深入交流和探讨Kafka学习过程中碰到的各种问题,同时我也会及时分享和推送各种最新的Kafka使用心得。
致谢
非常感谢Kafka PMC成员、Kafka Committer王国璋对本书的大力支持。自开始编写本书之日起,国璋兄就给予我很大的鼓励与帮助,这也让我坚定了传播Kafka实战心得的决心。
感谢腾讯AI平台助理总经理王迪先生和我的好友贾兴华,你们对本书的评价之高实在是过誉了,但也令本人倍感振奋。
感谢我的前同事、新浪微博技术专家付稳。付总对本书整体结构和具体知识点的建议发人深省,其独到的行业见解令人佩服。
非常感谢电子工业出版社的编辑付睿女士。她细致、专业、严谨的工作作风深深地感染了我,在本书编写过程中她总是能及时地就书中的内容给出合理的建议和指导。
另外,我还想感谢一下我的家人,特别是我的妻子刘丹女士。过去一年中正是你坚定的支持和默默的付出才成就我撰写本书。对于你偶尔在学术上给予的提点我既感到惊讶,同时也欣慰不已。这为我漫长枯燥的写书过程平添了很多温暖。
最后,非常感谢本书的每一位读者。本人已经在写作过程中收获良多,我衷心希望你们在阅读本书时也有大呼过瘾的感觉。另外,我在“知乎”(ID:huxihx)的Kafka专栏以及StackOverflow网站上也会尽力回答关于Kafka的各类问题,希望通过这些途径可以和读者进行更加深入的交流。
由于本人水平有限,书中难免有遗漏和疏忽,也恳请各位读者多多指正。
胡夕
2018年3月15日于北京
个人博客:https://www.cnblogs.com/huxi2b/
微信公众号:大数据Kafka技术分享
电子邮箱:huxi_2b@hotmail.com
书中296页底部的命令:
bin/admin-kafka-consumer-groups.sh ** —command-config producer.config
应该是
bin/kafka-admin-consumer-groups.sh * —command-config admin_jaas.conf