编辑推荐
本书从LinkedIn(领英)公司内部大数据架构讲起,引申出消息队列Kafka,接着讲解Kafka的基本架构,然后着重分析Kafka内部的各模块实现细节。从诞生背景至架构组成,再到内部实现细节,由浅入深,循序渐进。本书不仅讲解Kafka内部的实现原理,而且还详细描述Kafka外部的维护工具,对外的客户端编程原理以及和第三方集成的方式。本书在讲解Kafka的过程中穿插了大量的图片,图文并茂,生动形象,使读者能更加深入地熟悉Kafka。
内容简介
本书系统介绍Kafka的实现原理和应用方法,并介绍Kafka的运维工具、客户端编程方法和第三方集成方式,深入浅出、图文并茂、分析透彻。本书共10章,主要内容包括:第1章介绍Kafka诞生的背景和主要涉及目标。第2章介绍Kafka的基本组成、拓扑结构以及内部的通信协议。第3章介绍Broker Server及内部的模块组成。第4章介绍Broker Server内部的九大基本模块。第5章介绍Broker的控制管理模块。第6章介绍Topic的管理工具。第7章从设计原则、示例代码、模块组成和发送模式四个方面介绍有关消息生产者的相关知识。第8章介绍两种消费者:简单消费者和高级消费者。第9章介绍Kafka的典型应用,包括与Storm、ELK、Hadoop、Spark典型大数据系统的集成。第10章介绍了一个综合实例,描述Kafka作为数据总线在安防整体解决方案中的作用。
作者简介
王亮 ,资深架构师,曾在华为担任虚拟化技术工程师,后加入大华公司任分布式数据库系统架构师,研究兴趣为分布式存储、分布式数据库、消息系统等。
目录
序
前言
第1章 Kafka简介 1
1.1 Kafka诞生的背景 1
1.2 Kafka在LinkedIn内部的应用 3
1.3 Kafka的主要设计目标 4
1.4 为什么使用消息系统 4
1.5 本章小结 5
第2章 Kafka的架构 6
2.1 Kafka的基本组成 6
2.2 Kafka的拓扑结构 8
2.3 Kafka内部的通信协议 9
2.4 本章小结 12
第3章 Broker概述 13
3.1 Broker的启动 13
3.2 Broker内部的模块组成 15
3.3 本章小结 18
第4章 Broker的基本模块 19
4.1 SocketServer 19
4.2 KafkaRequestHandlerPool 25
4.3 KafkaApis 27
4.3.1 LogManager 27
4.3.2 ReplicaManager 37
4.3.3 OffsetManager 47
4.3.4 KafkaScheduler 51
4.3.5 KafkaApis 52
4.4 KafkaHealthcheck 81
4.5 TopicConf?igManager 83
4.6 本章小结 85
第5章 Broker的控制管理模块 86
5.1 KafkaController的选举策略 86
5.2 KafkaController的初始化 91
5.2.1 Leader状态下KafkaController的初始化 91
5.2.2 Standby状态下KafkaController的初始化 94
5.3 Topic的分区状态转换机制 95
5.3.1 分区状态的分类 95
5.3.2 分区状态的转换 96
5.3.3 PartitionStateMachine模块的启动 102
5.4 Topic分区的领导者副本选举策略 103
5.4.1 NoOpLeaderSelector 104
5.4.2 Off?linePartitionLeaderSelector 104
5.4.3 ReassignedPartitionLeader-Selector 106
5.4.4 PreferredReplicaPartition-LeaderSelector 107
5.4.5 ControlledShutdownLeader-Selector 108
5.5 Topic分区的副本状态转换机制 109
5.5.1 副本状态的分类 110
5.5.2 副本状态的转换 111
5.5.3 ReplicaStateMachine模块的启动 117
5.6 KafkaController内部的监听器 118
5.6.1 TopicChangeListener 119
5.6.2 AddPartitionsListener 121
5.6.3 PartitionsReassignedListener 122
5.6.4 ReassignedPartitionsIsr-ChangeListener 128
5.6.5 PreferredReplicaElection-Listener 130
5.6.6 BrokerChangeListener 132
5.6.7 DeleteTopicsListener 135
5.7 Kafka集群的负载均衡流程 136
5.8 Kafka集群的Topic删除流程 140
5.9 KafkaController的通信模块 146
5.10 本章小结 150
第6章 Topic的管理工具 151
6.1 kafka-topics.sh 151
6.1.1 createTopic 153
6.1.2 alterTopic 156
6.1.3 listTopics 160
6.1.4 describeTopic 161
6.1.5 deleteTopic 163
6.2 kafka-reassign-partitions.sh 164
6.2.1 generateAssignment 166
6.2.2 executeAssignment 167
6.2.3 verifyAssignment 170
6.3 kafka-preferred-replica-election.sh 172
6.4 本章小结 175
第7章 生产者 176
7.1 设计原则 176
7.2 示例代码 176
7.3 模块组成 180
7.3.1 ProducerSendThread 180
7.3.2 ProducerPool 182
7.3.3 DefaultEventHandler 184
7.4 发送模式 189
7.4.1 同步模式 189
7.4.2 异步模式 189
7.5 本章小结 192
第8章 消费者 193
8.1 简单消费者 193
8.1.1 设计原则 193
8.1.2 消费者流程 194
8.1.3 示例代码 195
8.1.4 原理解析 200
8.2 高级消费者 202
8.2.1 设计原则 202
8.2.2 消费者流程 203
8.2.3 示例代码 204
8.2.4 原理解析 205
8.3 本章小结 227
第9章 Kafka的典型应用 228
9.1 Kafka和Storm的集成 228
9.1.1 Storm简介 228
9.1.2 示例代码 230
9.2 Kafka和ELK的集成 235
9.2.1 ELK简介 235
9.2.2 配置流程 236
9.3 Kafka和Hadoop的集成 237
9.3.1 Hadoop简介 237
9.3.2 示例代码 239
9.4 Kafka和Spark的集成 242
9.4.1 Spark简介 242
9.4.2 示例代码 245
9.5 本章小结 247
第10章 Kafka的综合实例 248
10.1 安防大数据的主要应用 248
10.2 Kafka在安防整体解决方案中的角色 249
10.3 典型业务 250
10.3.1 车辆人脸图片数据的入库 251
10.3.2 视频数据的入库 252
10.3.3 数据延时的监控 254
10.3.4 数据质量的监控 256
10.3.5 布控统计 258
10.3.6 容灾备份 259
10.4 本章小结 260
前言/序言
Preface序
近些年来,大数据技术蓬勃发展,各种围绕大数据处理的平台技术,包括组件、工具、框架越来越丰富;相关的开源工具和实践资料也越来越多,其中消息队列便是一个重要的组成部分。对于一个大型系统而言,我们通常需要围绕消息来构建整个系统的逻辑,Kafka便是目前最主流的消息系统之一。网络上有很多关于Kafka使用的文章,但是始终没有一本全面的从源码和设计上展开阐述的书籍。
值得庆幸的是,本书全面解析了Kafka的核心架构设计和源码,是国内少有的针对Kafka进行系统性讲解的书籍。
作者在浙江大华技术股份有限公司工作期间,一方面参与分布式数据库平台开发,一方面参与整体的系统架构设计。由于各种不同的应用场景的需求,作者所在公司内部用过多种不同消息队列,如Kafka、ActiveMQ、RocketMQ等,同时也实操了大量的Hadoop、Spark等大数据技术和消息队列的结合应用,这些经历使得作者能比较全面地从理论和实践两个视角去看待Kafka。阅读本书可使读者深入了解Kafka的设计原理和使用技巧,相信读者一定会有所收获。
许焰
大华股份,研发副总经理
前 言 Preface
我开始接触分布式计算的时候,正好需要利用Spark结合Kafka进行流式处理。恰巧的是Kafka和Spark底层都是利用Scala语言编写的,并且当时市面上有关Kafka的中文书籍几乎没有,因此正好利用这个机会学习了Scala语言,并且通读了Kafka和Spark的源码,随后把日常的积累通过博客的形式慢慢记录下来。在这一年多的积累过程中,发现有关Kafka的中文书籍还是很缺乏,便有了总结出书的想法,而恰在这个时候吴怡编辑通过博客联系上了我,希望我把日常的积累总结成Kafka的专业性书籍,分享给更广大的从事大数据相关工作的人群。
本书将从初学者的角度出发,循序渐进地讲解Kafka内部的实现原理,但是由于Kafka是基于Scala语言编写的,因此为了更好地阅读本书,希望读者对于Scala语言有大致的了解。
阅读指南
本书将从Kafka的内部实现原理、运维工具、客户端编程以及实际应用这四个方面出发,系统阐述有关Kafka的各方面知识,全书共10章,每章的大致内容如下。
第1章介绍Kafka诞生的背景、Kafka在LinkedIn内部的应用、Kafka的主要设计目标以及为什么使用消息系统。
第2章介绍Kafka的基本组成、拓扑结构及其内部的通信协议。
第3章描述Kafka集群组成的基本元素Broker Server的启动以及内部的模块组成。通过阅读这一章,读者能对Broker Server有整体上的印象,为之后章节的阅读打下基础。
第4章描述Broker Server内部的九大基本模块:SocketServer、KafkaRequestHandlerPool、LogManager、ReplicaManager、OffsetManager、KafkaScheduler、KafkaApis、KafkaHealthcheck和TopicConfigManager。
第5章介绍Broker Server的控制管理模块KafkaController,这个模块负责整个Kafka集群的管理,例如:Topic的新建和删除、分区状态和副本状态的转换、集群的负载均衡管理等。
第6章介绍三个维护脚本:kafka-topics.sh、kafka-reassign-partitions.sh和kafka-preferred-replica-election.sh,它们分别涉及Topic的生命周期管理、Topic分区的重分配和分区首选副本的选择。
第7章从设计原则、示例代码、模块组成和发送模式四个部分介绍有关消息生产者的相关知识,从设计原则至客户端编程,从客户端编程到内部实现原理,由浅入深,循序渐进地讲解。
第8章分别介绍两种消费者:简单消费者和高级消费者。针对每种消费者都将依次从设计原则、消费者流程、示例代码以及原理解析四个部分介绍消费者的相关知识。
第9章介绍Kafka与典型大数据系统的集成,包括:Kafka和Storm的集成、Kafka和ELK的集成、Kafka和Hadoop的集成以及Kafka和Spark的集成。希望通过本章使读者对Kafka和第三方大数据平台集成有大致的了解。
第10章用综合实例描述了Kafka的应用,案例描述Kafka作为数据总线在安防整体解决方案中的作用,通过车辆人脸图片数据的入库、视频数据的入库、数据延时的监控、数据质量的监控、布控统计和容灾备份6个业务,简要阐述内部的实现原理。
本书是基于0.8.2版本的Kafka编写的,其相关配套的源码可以从Kafka的官方网站上下载,下载地址为http://kafka.apache.org/downloads,也可以从开源或者私有软件项目托管平台GitHub上下载,下载地址为https://github.com/apache/kafka。为了简化代码流程描述,笔者会将一些日志打印等不影响阅读的代码用“……”代替,如果需要知道“……”代表的实际含义,可以参考源码包中的真实代码。
本书特点
由浅入深,循序渐进:本书从LinkedIn(领英)公司内部大数据架构讲起,引出消息队列Kafka,接着讲解Kafka的基本架构,然后着重分析Kafka内部的各模块实现细节。从诞生背景至架构组成,再到内部实现细节,由浅入深,循序渐进,让读者在阅读时能够逐步了解Kafka。
由里到外,层层剖析:本书不仅讲解Kafka内部的实现原理,而且还详细描述Kafka外部的维护工具,对外的客户端编程原理以及和第三方集成的方式。由里到外,层层剖析,让读者在阅读时能够更加全面地掌握Kafka。
图文并茂,生动形象:本书在讲解Kafka的过程中穿插了大量的图片,直观地描述了工作原理,使读者在阅读时能够加深对代码的理解。
读者对象
本书适合以下人群阅读:
想熟悉典型消息系统架构的大数据从业人员。
想了解分布式系统开发的软件工程师。
想掌握Kafka内部实现原理的中高级开发人员。
想搭建传统大数据框架的系统分析师。
致谢
首先感谢我的夫人在我背后默默的付出,是她给了我动力,陪伴我度过了长达半年之久的枯燥时光,坚定了我完成此书的决心。其次感谢机械工业出版社吴怡编辑的鼓励和支持,是她促成了这本书的出版。接着感谢我的鱼儿们(布隆迪、金头虎、蓝茉莉、三间鼠和反游猫),每当我思绪混乱的时候可以静静地看着它们慢慢梳理。
在本书成书的过程中也得到了许多同事和同学的支持、鼓励,在此一并致谢。
由于作者水平及能力有限,加之时间仓促,本书难免存在错误和不妥之处,恳请广大读者批评指正,邮箱地址为:wangliang168219@126.com。
Kafka源码解析与实战 电子书 下载 mobi epub pdf txt