前言
为什么要写这本书
Kafka由于高吞吐量、可持久化、分布式、支持流数据处理等特性而被广泛应用。但当前关于Kafka原理及应用的相关资料较少,在我打算编写本书时,还没有见到中文版本的Kafka相关书籍,对于初学者甚至是一些中高级应用者来说学习成本还是比较高的,因此我打算在对Kafka进行深入而系统的研究基础上,结合自己在工作中的实践经验,编写一本介绍Kafka原理及其基本应用的书籍,以帮助Kafka初、中、高级应用者更快、更好地全面掌握Kafka的基础理论及其基本应用,从而解决实际业务中的问题。同时,一直以来我都考虑在技术方面写点什么,将自己所学、所积累的知识沉淀下来。
通过编写本书,我最大收获有如下两点。
第一,凡事不是要尽力而为,而是要全力以赴,持之以恒。写书和阅读源码其实都是很枯燥的事,理工科出身的我,在文字表达能力上还是有所欠缺的,有些知识点可能在脑海里十分清晰,然而当用文字表述出来时,就显得有些“力不从心”了。对于纯技术的东西要用让读者阅读时感觉轻松的文字描述出来更是不易,因此看似简短的几行文字,我在编写时可能斟酌和修改了很久。我真的很钦佩那些大师们,他们写出来的东西总让人很轻松地就能够掌握,“路漫漫其修远兮,吾将上下而求索”,向大师们致敬!虽然有很多客观或主观的因素存在,但我依然没有放弃。还记得2016年10月的一天,当我决定编写本书时,我告诉妻子:“我要写一本书作为送给我们未来宝宝的见面礼!”带着这份动力我利用下班时间、周末时间,在夜深人静时默默地进行着Kafka相关内容的研究、学习、实战,妻子对我的鼓励、陪伴更是激励我要坚持本书的编写。带着这份动力,带着这份爱,我终于完成了本书。
第二,通过对Kafka源码的阅读,我除了对很多原来在实践中只知其然而不知其所以然的问题有了更深入的理解以外,还对Kafka优秀的设计思想及其编码技巧有所了解。
如何阅读本书
本书共10章,各章主要内容具体描述如下。
第1章对Kafka的基本概念进行简要介绍,方便读者对Kafka有一个大致的了解。
第2章详细介绍Kafka安装环境的配置及Kafka源码的编译,这一章为后续各章的Kafka原理讲解及基本操作进行准备。
第3章对Kafka基本组件的实现原理、实现细节进行了分析。如果只想了解Kafka的相关应用,而不关注Kafka的实现原理,在阅读时可以直接跳过这一章。但我觉得,如果想真正掌握Kafka及其实现细节,这一章是值得花时间仔细阅读的。
第4章对Kafka核心流程进行分析,主要从Kafka启动流程到创建一个主题、生产者发送消息、消费者消费消息的过程进行了简要介绍。这一章是Kafka运行机制的缩影,如果跳过了第3章关于组件实现原理的讲解,那么建议一定要阅读这一章,因为通过阅读这一章可以更进一步地了解Kafka运行时的主要角色及其职责,为后面的Kafka实战部分打下坚实基础。
第5章开始就进入了Kafka实战部分。这一章通过Kafka自带脚本演示,详细介绍了Kafka基本应用的操作步骤,基本覆盖了Kafka相关操作,因此请读者在阅读时要跟随本书所讲内容进行实战。
第6章对Kafka的API应用进行了详细介绍。如果读者在实践工作中不会用到调用Kafka的相关API,在阅读时也可以跳过这一章。
第7章对Kafka Streams进行了介绍。Kafka Streams是Kafka新增的支持流数据处理的Java库。如果读者不希望使用此功能,也可以跳过这一章。
第8章介绍Kafka在数据采集方面的应用,主要包括与Log4j、Flume和HDFS的整合应用。
第9章对Kafka与ELK(Elasticsearch、Logstash和Kibana)整合实现日志采集平台相关应用进行介绍。
第10章通过两个简单的实例,介绍了Spark以及Kafka与Spark整合在离线计算、实时计算方面的应用。
本书的结构安排上,各章的内容相互独立,因此读者可以首先选择自己最感兴趣的章进行阅读,之后再阅读其他章。例如,读者可以先阅读第5章及其之后的几章,先通过实践操作对Kafka有一个感性的认识,然后再阅读第3章和第4章的相关原理及运行机制的内容,逐步加深对Kafka实现细节的理解。而第8章至第10章则是Kafka与当前大数据处理主流框架的整合应用,属于Kafka高级应用部分,可以帮助读者解决实际业务问题。
我建议读者一定要阅读第2章。通过第2章介绍的环境配置,读者能自己在本地搭建Kafka运行环境,阅读本书时,可跟随本书所讲解的操作进行实践。
读者对象
本书的目标读者定位是应用Kafka的初、中、高级开发人员及运维工程师。
从事Kafka应用开发的技术人员读完本书,可以学习到Kafka原理的分析及相关API应用以及结合当前主流大数据框架整合的应用,应该能够全面掌握Kafka的基本原理和整体结构,并为实际业务实现提供思路,从而能够更加快速地解决一些问题。
从事Kafka或数据运维的技术人员,读完本书详细的Kafka基本操作以及Kafka与其他大数据框架的整合应用案例,应该可以快速搭建、运维和管理Kafka及相应的系统平台。
从事Kafka相关应用的资深开发或架构人员,读完本书对Kafka原理的分析有助于对Kafka性能进行调优,可以更好地开发和设计与Kafka相关的应用。
对于初学者,通过阅读本书可以全面掌握Kafka的知识,同时可以通过Kafka与其他框架整合的案例来拓宽视野,为学习分布式相关知识打下基础。
在阅读本书之前,读者需要具备以下基础。
● 具有一定的Linux操作系统基本操作的基础知识。
● 对于分布式系统的基础有所了解,这关系到对集群的理解。
● 如果希望阅读本书第3章至第7章关于Kafka基本组件实现原理及编程实战的内容,需要具有Java或Scala语言基础,尤其是Java语言基础,这有助于阅读Kafka源码和调用相应的API。
参考资料
在写作过程当中,我除阅读了Kafka源码之外,还从网络上阅读了大量参考资料,从中获得了很多帮助,在此对这些前辈的无私奉献精神表示由衷的钦佩和衷心的感谢。本书参考的资料如下。
● 书籍
◆ 怀特.Hadoop权威指南[M].3版.华东师范大学数据科学与工程学院,译.北京:清华大学出版社,2015:20-156.
◆ 霍夫曼,佩雷拉.Flume日志收集与MapReduce模式[M].张龙,译.北京:机械工业出版社,2015:1-61.
◆ 耿嘉安.深入理解Spark:核心思想与源码分析[M].北京:机械工业出版社,2016:224-282.
● 网络资源
◆ Kafka官方网站:http://kaf ka.apache.org/0101/documentation.html。
◆ Elasticsearch官方网站:https://www.elastic.co/guide/en/elasticsearch/reference/index.html。
◆ http://orchome.com/网站上关于Kafka系列文章。
◆ conflument官方博客:https://www.confluent.io/blog/。
◆ zqhxuyuan的博客:http://zqhxuyuan.github.io/。
◆ lizhitao的博客:http://blog.csdn.net/lizhitao。
读者反馈
非常高兴能将这本书分享给大家,也十分感谢大家购买和阅读本书。在编写本书时,虽然我精益求精,尽了最大的努力,但由于能力有限,加之时间仓促,书中难免存在不足甚至错误,敬请读者给予指正。如果有任何问题和建议,读者可发送邮件至moudaen@163.com。
致谢
在编写本书时得到了很多人的帮助。
首先我要感谢我的妻子,在我编写本书时你承担了所有家务,让我过着饭来张口、衣来伸手的生活,使我能够全身心投入到写作当中,这本书能够完成有你一半的功劳。也要感谢我的家人,家永远是我心灵的港湾,家人的爱永远是我奋斗的动力。同时也将本书献给我即将出生的宝宝,愿你健康成长,在未来的日子里我会给你更多的惊喜。
然后我特别要感谢人民邮电出版社的杨海玲老师,感谢你一直以来给予我的支持和鼓励,感谢你在本书编写、出版整个过程当中的辛勤付出。也要感谢人民邮电出版社所有参与本书编辑和出版的老师们,正是由于你们的辛勤付出和一丝不苟的工作态度才让本书出版成为可能。
同时要感谢我的工作单位海通证券,公司为我提供了一个非常优越的工作、学习和生活环境。在此要特别感谢部门领导和同事在我编写本书过程中提出很多宝贵的建议,我很荣幸能够与大家成为同事,共同奋斗。
最后我要感谢所有培养过我的老师们,是你们教会了我用知识改变命运,用学习成就未来。
牟大恩
2017年9月于上海