前言
初识Kafka时,笔者接触的还是0.8.1版本,Kafka发展到目前的2.0.0版本,笔者也见证了Kafka的蜕变,比如旧版客户端的淘汰、新版客户端的设计、Kafka控制器的迭代优化、私有协议的变更、事务功能的引入等。Kafka从昔日的新星逐渐走向成熟,再到今日的王者地位不可撼动,这期间有太多的故事可讲。
刚接触Kafka时,市面上很少有关于Kafka的书籍。在学习Kafka的过程中也经历过很多挫败,比如Scala这门编程语言就让笔者在Kafka的源码大门外却步良久。那时候就在想,如果有一本书能够全方位地解析Kafka该有多好啊。
随着对Kafka的逐步了解,也渐渐地萌生了自己写一本关于Kafka的书的想法,产生这一想法至今已超过两年。在这期间,笔者阴差阳错地先写了一本关于RabbitMQ的书,也就是《RabbitMQ实战指南》,此时已是2017年年末,市面上已经陆续出现了好几本有关Kafka的书,而且此时Kafka的版本也已经升级到1.0.0。
笔者认真看过几乎所有现存的Kafka的书籍,回想这一路学习和使用Kafka的经历,深感这些都不是自己理想中的书籍,那么不如自己再“操刀”写一本。本书秉承能用文字表述的就不贴源码、能用图形辅助的就不乏味陈述;既要让新手能够快速入门,也要让老手有所收获,从基础概念入手,再到原理深入,让读者能够由浅入深地理解Kafka。
本书依据Kafka 2.0.0版本编写,书中所有内容都具备理论基础并全部实践过,书中的内容也是笔者在工作中的认知积累,希望本书能够让读者有所收获。
内容大纲
本书共12章,前后章节都有相应的联系,基本上按照由浅入深、由表及里的层次逐层进行讲解,如果读者对其中的某些内容已经掌握,可以选择跳过而翻阅后面的内容,不过还是建议读者按照先后顺序进行阅读。
第1章对Kafka的基础概念进行笼统的介绍,之后讲解如何安装与配置Kafka,以及通过简单的生产消费消息的示例让读者能够快速地入门。
第2章主要是针对生产者客户端的讲解,包括生产者客户端参数、消息的发送、序列化、分区器、拦截器、原理解析等内容。
第3章主要是针对消费者客户端的讲解,包括消费者客户端参数、主题与分区的订阅、反序列化、消息的消费、位移提交、再均衡、拦截器、多线程实现等内容。
第4章主要介绍主题与分区的管理,包括创建主题、修改主题、删除主题、主题端参数配置、优先副本、分区重分配、复制限流,以及对分区数抉择的探讨等内容。
第5章主要讲解日志存储相关的内容,包括文件目录的布局、日志格式的演变、日志清理的细节、底层存储的原理等内容。
第6章主要对Kafka服务端的一些内部核心内容进行详细的阐述,包括协议设计、延时操作、控制器、leader的选举等内容。
第7章主要是对Kafka客户端相关的原理剖析,当然其中也需要牵涉服务端的内容。这一章包括消费端分区分配策略、消费者协调器和组协调器、__consumer_offsets的剖析、事务的介绍等内容。
第8章主要对可靠性、一致性等核心原理进行陈述,本章内容最为抽象,主要包括失效副本、ISR伸缩、LEO与HW、Leader Epoch的介入、日志同步机制、可靠性分析等内容。
第9章主要是对Kafka相关应用的一些补充,包括一些重要的管理工具,还有Kafka Connect、Kafka Mirror Maker和Kafka Streams等内容。
第10章是与Kafka监控相关的内容,监控作为Kafka生态中的一个必备内容,有着相当重要的地位,通过学习本章的内容可以让读者对整个监控的脉络设计和底层实现有清晰的认知。
第11章是对Kafka做一些功能性的扩展,包括过期时间、延时队列、死信队列、重试队列、消息路由、消息轨迹、消息审计、消息代理等内容,最后还通过对消息中间件选型的阐述以期让读者对整个消息中间件领域有发散性的思考。
第12章主要讲述的是Kafka与Spark集成的一些内容,包括Spark基本概念、Spark Streaming、Structured Streaming,以及它们与Kafka集成的细节等内容。
读者讨论
由于笔者水平有限,书中难免有错误之处。在本书出版后的任何时间,若您对本书有任何疑问都可以通过zhuzhonghua.ideal@qq.com发送邮件给笔者,也可以到笔者的个人博客http://blog.csdn.net/u013256816中留言,向笔者阐述您的建议和想法。书中的源码会在本书发行之后进行整理,最后会公布在笔者的个人微信公众号(朱小厮的博客,二维码在封面上)中。
致谢
首先要感谢我身处的平台,让我有机会深入地接触Kafka。同时要感谢我身边的同事,正因为有了你们的鼓励和帮助,才让我能够迅速地成长,本书的问世,离不开与你们在工作中一起积累的点点滴滴。
感谢蒋晓峰同学不辞辛苦地为本书校稿,有了你的帮助才会让本书更加完善。
感谢在我博客、微信公众号中提问留言的朋友,感谢消息生态圈的朋友,有了你们的意见和建议才能让本书更加完善。
感谢博文视点的编辑们,本书能够顺利、迅速地出版,多亏了你们的敬业精神和一丝不苟的工作态度。
最后还要感谢我的家人,在我占用绝大部分的业余时间进行写作的时候,能够给予我极大的宽容、理解和支持,让我能够全身心地投入写作之中。
朱忠华