Apache Kafka源码剖析
  • 推荐4
  • 收藏4
  • 浏览2.6K

Apache Kafka源码剖析

徐郡明 (作者) 

  • 书  号:978-7-121-31345-5
  • 出版日期:2017-05-08
  • 页  数:604
  • 开  本:16(185*235)
  • 出版状态:上市销售
纸质版 ¥89.00
本书以 Kafka 0.10.0 版本源码为基础,针对 Kafka的架构设计到实现细节进行详细阐述。本书共5 章,从 Kafka 的应用场景、源码环境搭建开始逐步深入,对 Kafka 的核心概念进行分析介绍,对 Kafka 生产者、消费者、服务端的源码进行深入的剖析,最后介绍 Kafka 常用的管理脚本实现,让读者不仅从宏观设计上了解 Kafka,而且能够深入到 Kafka 的细节设计之中。在源码分析的过程中,还穿插了笔者工作积累的经验分析和对 Kafka 设计的理解,希望能够让读者可以举一反三,不仅知其然,而且知其所以然。
  本书旨在为读者阅读 Kafka 源码提供帮助和指导,让读者更加深入地了解 Kafka 的运行原理、设计理念,让读者在设计分布式系统时可以参考 Kafka 的优秀设计。本书的内容对于读者全面提升自己的技术能力有很大帮助。
从架构设计到实现细节,从应用场景到核心概念,详细分析Kafka生产者、消费者、Server端源码
前 言
这是一个数据大爆炸的时代,互联网成为了数据传播的主要载体。大数据处理平台在现代化的互联网公司进行商业决策、规划发展、市场拓展等方面扮演着越来越重要的角色。Kafka作为大数据平台的重要组件之一,受到越来越多的设计人员和开发人员的青睐,Kafka的社区也变得越来越活跃,Kafka本身的架构设计、应用场景也得到了长足的发展。
Kafka最开始由LinkedIn设计开发,并于2011年年初开源,2012年10月成为Apache基金会的顶级项目。目前Kafka为越来越多的分布式大数据处理系统提供支持,其中也包括著名的Apache Spark,LinkedIn、Netflix、Uber、Verizon、网易、美团等互联网公司也选择以Kafka为基础搭建其大数据处理平台或消息中间件系统。随着Kafka的应用场景越来越丰富,用户对Kafka的吞吐量、可扩展性、稳定性和可维护性等有了更多的期许,也有很多开发人员参与到Kafka的开发建议制定和代码提交中。在Kafka 0.10.X版本中出现了很多令人欣喜的新功能,本书深入剖析了Kafka 0.10.X的内部设计和实现细节。
本书以Kafka 0.10.0版本源码为基础,深入剖析了Kafka的各个模块的实现,包括Kafka的生产者客户端、消费者客户端、服务端的各个模块以及常用的管理脚本。笔者对Kafka设计的理解和经验分享也穿插在了剖析源码的过程中,希望读者能够通过本书理解Kafka的设计原理和源码实现,同时也学习到Kafka中优秀的设计思想以及Java和Scala的编程技巧和规范。
如何阅读本书
由于本书的篇幅限制,本书并没有详细介绍Kafka源码中涉及的所有基础知识,例如Java NIO、J.U.C包中工具类的使用、命令行参数解析器的使用等,为方便读者阅读,笔者仅介绍了一些必须且重要的基础知识。在开始源码分析之前,希望读者按照第1章的相关介绍完成Kafka源码环境的搭建,并了解Kafka的核心概念,这样也可以有更好的学习效果。
本书共五章,它们互相之间的联系并不是很强,读者可以从头开始阅读,也可以选择自己感兴趣的章节进行学习。
第1章是Kafka的快速入门,其中介绍了Kafka的背景、特性以及应用场景。之后介绍了笔者在实践中遇到的一个以Kafka为中心的案例,并分析了在此案例中选择使用Kafka的具体原因和Kafka起到的关键作用。最后介绍了Kafka中的核心概念和Kafka源码调试环境的搭建。
第2章介绍了生产者客户端的设计特点和实现细节,剖析了KafkaProducer拦截消息、序列化消息、路由消息等功能的源码实现,介绍了RecordAccumulator的结构和实现。最后剖析了KafkaProducer中Sender线程的源码。
第3章介绍了Kafka的消息传递保证语义并给出了相关的实践建议,还介绍了Consumer Group Rebalance操作各个版本方案的原理和弊端。最后详细剖析了KafkaConsumer相关组件的运行原理和实现细节。
第4章介绍了构成Kafka服务端的各个组件,依次分析了Kafka网络层、API层、日志存储、DelayedOperationPurgatory组件、Kafka的副本机制、KafkaController、GroupCoordinator、Kafka的身份认证与权限控制以及Kafka监控相关的实现。本章是Kafka的核心内容,涉及较多的设计细节和编程技巧,希望读者阅读之后有所收获。
第5章介绍了Kafka提供的多个脚本工具的使用以及具体实现原理,了解这些脚本可以帮助管理人员快速完成一些常见的管理、运维、测试功能。
如果读者在阅读本书的过程中,发现任何不妥之处,请将您宝贵的意见和建议发送到邮箱xxxlxy2008@163.com,也欢迎读者朋友通过此邮箱与笔者进行交流。
致谢
感谢电子工业出版社博文视点的陈晓猛老师,是您的辛勤工作让本书的出版成为可能。同时还要感谢许多我不知道名字的幕后工作人员为本书付出的努力。
感谢张占龙、张亚森、杨威、刘克刚、刘思等朋友在百忙之中抽出时间对本书进行审阅和推荐。感谢林放、米秀明、星亮亮、王松洋、褚洪洋、曾天宁、葛彬、赵美凯、顾聪慧、孙向川、段鑫冬、彭海蛟、赵仁伟等同事,帮助我解决工作中的困难。
感谢冯玉玉、李成伟,是你们让写作的过程变得妙趣横生,是你们让我更加积极、自信,也是你们的鼓励让我完成了本书的写作。
最后,特别感谢我的母亲大人,谢谢您默默为我做出的牺牲和付出,您是我永远的女神。

徐郡明

目录

目?录
第1章 快速入门
1.1 Kafka简介
1.2 以Kafka为中心的解决方案
1.3 Kafka核心概念
1.4 搭建Kafka源码环境
本章小结

第2章 生产者
2.1  KafkaProducer使用示例
2.2 KafkaProducer分析
2.2.1 ProducerInterceptors&ProducerInterceptor
2.2.2 Kafka集群元数据
2.2.3 Serializer&Deserializer
2.2.4 Partitioner
2.3 RecordAccumulator分析
2.3.1 MemoryRecords
2.3.2 RecordBatch
2.3.3 BufferPool
2.3.4 RecordAccumulator
2.4 Sender分析
2.4.1 创建请求
2.4.2 KSelector
2.4.3 InFlightRequests
2.4.4 MetadataUpdater
2.4.5 NetworkClient
本章小结

第3章 消费者
3.1 KafkaConsumer使用示例
3.2 传递保证语义(Delivery guarantee semantic)
3.3 Consumer Group Rebalance设计
3.4 KafkaConsumer分析
3.4.1 ConsumerNetworkClient
3.4.2 SubscriptionState
3.4.3 ConsumerCoordinator
3.4.4 PartitionAssignor分析
3.4.5 Heartbeat分析
3.4.6 Rebalance实现
3.4.7 offset操作
3.4.8 Fetcher
3.4.9 KafkaConsumer分析总结
本章小结

第4章 Kafka服务端
4.1 网络层
4.1.1 Reactor模式
4.1.2 SocketServer
4.1.3 AbstractServerThread
4.1.4 Acceptor
4.1.5 Processor
4.1.6 RequestChannel
4.2 API层
4.2.1 KafkaRequestHandler
4.2.2 KafkaApis
4.3 日志存储
4.3.1 基本概念
4.3.2 FileMessageSet
4.3.3 ByteBufferMessageSet
4.3.4 OffsetIndex
4.3.5 LogSegment
4.3.6 Log
4.3.7 LogManager
4.4 DelayedOperationPurgatory组件
4.4.1 TimingWheel
4.4.2 SystemTimer
4.4.3 DelayedOperation
4.4.4 DelayedOperationPurgatory
4.4.5 DelayedProduce
4.4.6 DelayedFetch
4.5 副本机制
4.5.1 副本
4.5.2 分区
4.5.3 ReplicaManager
4.6 KafkaController
4.6.1 ControllerChannelManager
4.6.2 ControllerContext
4.6.3 ControllerBrokerRequestBatch
4.6.4 PartitionStateMachine
4.6.5 PartitionLeaderSelector
4.6.6 ReplicaStateMachine
4.6.7 ZooKeeper Listener
4.6.8 KafkaController初始化与故障转移
4.6.9 处理ControlledShutdownRequest
4.7 GroupCoordinator
4.7.1 GroupMetadataManager
4.7.2 GroupCoordinator分析
4.8 身份认证与权限控制
4.8.1 配置SASL/PLAIN认证
4.8.2 身份认证
4.8.3 权限控制
4.9 Kafka监控
4.9.1 JMX简介
4.9.2 Metrics简介
4.9.3 Kafka中的Metrics
4.9.4 Kafka的监控功能
4.9.5 监控KSelector的指标

第5章 Kafka Tool
5.1 kafka-server-start脚本
5.2 kafka-topics脚本
5.2.1 创建Topic
5.2.2 修改Topic
5.3 kafka-preferred-replica-election脚本
5.4 kafka-reassign-partitions脚本
5.5 kafka-console-producer脚本
5.6 kafka-console-consumer脚本
5.7 kafka-consumer-groups脚本
5.8 DumpLogSegments
5.9 kafka-producer-perf-test脚本
5.10 kafka-consumer-perf-test脚本
5.11 kafka-mirror-maker脚本
本章小结

本书勘误

印次
  • 页码:10  •  行数:1  •  印次: 1

    …同一分区的多个分区会…” 应该改为 “同一分区的多个副本”

    陈晓猛 提交于 2017/6/5 16:55:52
    陈晓猛 确认于 2017/6/5 16:57:19
  • 页码:11  •  行数:最后一行  •  印次: 1

    “…offset=11 的消息就对生产者可见了…” 应该改为 “…就对消费者可见了…”

    陈晓猛 提交于 2017/6/5 16:56:28
    陈晓猛 确认于 2017/6/5 16:57:08
  • 页码:12  •  行数:倒数7行  •  印次: 1

    当Follower副本的延迟过高时,Leader副本被踢出ISR集合。这里应该是Follower副本被踢出ISR集合

    chief 提交于 2017/6/1 16:30:55
    陈晓猛 确认于 2017/6/2 9:40:38
  • 页码:13  •  行数:4  •  印次: 1

    【Controller负责管理分区的状状态】改为【Controller负责管理分区的状态】

    昂心飞扬 提交于 2017/6/21 17:55:10
    陈晓猛 确认于 2017/6/22 16:10:10
  • 页码:14  •  印次: 1

    倒数第二行改为【consumer3只消费partition2中的消息,partition3中的消息则由consumer4来消费】

    冰箱哥哥 提交于 2017/9/12 19:04:38
    陈晓猛 确认于 2017/9/15 11:07:33

读者评论

  • 13页,消费者,三个消费者消费同一个分区,一个分区只能被一个消费者消费了

    陌路郑发表于 2021/10/15 8:55:19
  • 13页,三个消费者消费同一个分区,不是一个分区只能被一个消费者消费么

    陌路郑发表于 2021/10/15 8:52:05
  • 1.1中消费者会验证分区数量,我有个topic32个分区。其中一个是从metadata获取的是32个,另一个获取的时候只有23个,看不懂是哪里获取的。源码在InternalTopicManager,validateTopicPartitions方法。望请赐教,万分感谢。

    余火发表于 2019/3/26 23:39:07
  • 小弟在此书获益良多,太感谢了,不过小弟有一些疑惑
    kafka集群中多个broker会有一个在zk的/controller注册临时节点成为kafka controller,其余为follower并watch这个/controller的子节点。当通过命令创建topic,或auto create topic的时候,会在zk的/brokers/topics/创建topic持久节点,然后kafka controller所在broker的相关类partitionSateMachine的topicChangeLisenter会监测到/brokers/topics/子节点的变化,进而创建此topic对应的目录和文件以及内存中相关元数据。如果kafka controller在监听到topic新增并准备后续处理的时候,kafka controller宕机,其余follower之一在zk重新注册成为kafka controller,并添加新的topicChangeLisener,新kafka controller已经无法处理上一届kafka controller创建topic相关文件等后续操作了?其他lisener也有相同的问题?

    robot_user发表于 2017/11/9 15:20:31
  • 源码编译的时候出现无法加载主类怎么解决呢

    冰箱哥哥发表于 2017/9/17 11:26:48
    • 遇到同样的问题,请作者或者其他高手解答

      1458052179发表于 2021/10/18 13:10:52

相关图书

ATT&CK框架实践指南

过去,入侵检测能力的度量是个公认的行业难题,各个企业得安全负责人每年在入侵防护上都投入大量费用,但几乎没有人能回答CEO 的问题:“买了这么多产品,我们的入侵防...

¥148.00

架构解密:从分布式到微服务(第2版)

吴治辉 (作者)

微服务、云原生、Kubernetes、Service Mesh是分布式领域的热点技术,它们并不是凭空出现的,一定继承了某些“前辈”的优点。我们不仅要了解这些技术...

 

深入理解Apache Dubbo与实战

诣极 林琳 (作者)

本书首先介绍Dubbo的简史、后续的规划和整体架构大图;接着介绍Dubbo环境配置,并基于Dubbo开发第一款应用程序;然后介绍Dubbo内置的常用注册中心的实...

¥79.00

RabbitMQ实战指南

朱忠华 (作者)

本书从消息中间件的概念和RabbitMQ的历史切入,主要阐述RabbitMQ的安装、使用、配置、管理、运维、原理、扩展等方面的细节。本书大致可以分为基础篇、进阶...

¥79.00

Spring Boot 2精髓:从构建小系统到架构分布式大系统

李家智 (作者)

Spring Boot是目前Spring技术体系中炙手可热的框架之一,既可用于构建业务复杂的企业应用系统,也可以开发高性能和高吞吐量的互联网应用。Spring ...

¥79.00

架构探险:从零开始写分布式服务框架

李业兵 李业兵 (作者)

分布式服务框架目前已经是互联网公司实现SOA服务化架构的必备基础设施,对于一般的开发而言,自己要独立实现一个分布式服务框架,还是有相当的难度的。本书围绕如何从零...