Apache Kafka源碼剖析
  • 推薦4
  • 收藏4
  • 瀏覽1.8K

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提供的多個腳本工具的使用以及具體實現原理,了解這些腳本可以幫助管理人員快速完成一些常見的管理、運維、測試功能。
如果讀者在閱讀本書的過程中,發現任何不妥之處,請將您寶貴的意見和建議發送到郵箱[email protected],也歡迎讀者朋友通過此郵箱與筆者進行交流。
致謝
感謝電子工業出版社博文視點的陳曉猛老師,是您的辛勤工作讓本書的出版成為可能。同時還要感謝許多我不知道名字的幕后工作人員為本書付出的努力。
感謝張占龍、張亞森、楊威、劉克剛、劉思等朋友在百忙之中抽出時間對本書進行審閱和推薦。感謝林放、米秀明、星亮亮、王松洋、褚洪洋、曾天寧、葛彬、趙美凱、顧聰慧、孫向川、段鑫冬、彭海蛟、趙仁偉等同事,幫助我解決工作中的困難。
感謝馮玉玉、李成偉,是你們讓寫作的過程變得妙趣橫生,是你們讓我更加積極、自信,也是你們的鼓勵讓我完成了本書的寫作。
最后,特別感謝我的母親大人,謝謝您默默為我做出的犧牲和付出,您是我永遠的女神。

徐郡明

目錄

目?錄
第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

讀者評論

  • 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
  • 書中的源代碼 不知道在哪里下載

    chu227發表于 2017/6/23 23:36:35
  • 我的天啊,錯誤真的好多啊,作者能不能認真仔細讀一遍,趕緊出個勘誤文檔,有些錯誤真的很影響初學者。

    昂心飛揚發表于 2017/6/21 17:57:24
    • 勘誤會提交到本書頁面的勘誤處,相應的錯誤也會在下一次印刷中改正,感謝您的反饋

      陳曉猛發表于 2017/6/22 9:38:47

相關圖書

深入理解Apache Dubbo與實戰

詣極 林琳 (作者)

本書首先介紹Dubbo的簡史、后續的規劃和整體架構大圖;接著介紹Dubbo環境配置,并基于Dubbo開發第一款應用程序;然后介紹Dubbo內置的常用注冊中心的實...

¥79.00

RabbitMQ實戰指南

朱忠華 (作者)

本書從消息中間件的概念和RabbitMQ的歷史切入,主要闡述RabbitMQ的安裝、使用、配置、管理、運維、原理、擴展等方面的細節。本書大致可以分為基礎篇、進階...

¥79.00

Spring Boot 2精髓:從構建小系統到架構分布式大系統

李家智 (作者)

Spring Boot是目前Spring技術體系中炙手可熱的框架之一,既可用于構建業務復雜的企業應用系統,也可以開發高性能和高吞吐量的互聯網應用。Spring ...

¥79.00

架構探險:從零開始寫分布式服務框架

李業兵 李業兵 (作者)

分布式服務框架目前已經是互聯網公司實現SOA服務化架構的必備基礎設施,對于一般的開發而言,自己要獨立實現一個分布式服務框架,還是有相當的難度的。本書圍繞如何從零...

 

人人都是架構師:分布式系統架構落地與瓶頸突破

高翔龍 (作者)

本書注重大型網站技術架構方案的落地,以及實戰實施。本書不僅會從宏觀的角度去闡述大型電商網站系統的架構設計,更重要的是,會結合筆者實際的工作經驗,深入剖析大型電商...

¥69.00

重構網絡:SDN架構與實現

李呈 (作者)

身處SDN發展浪潮,筆者真切地感受到了這場技術革命的到來。為了自我總結,也為了幫助他人,因此決定寫這本書。 <br>本書首先介紹了SDN的定義、SDN出現的原因...

¥45.00
澳洲幸运10现场开奖