KafkaProducer的metadata獲取過程


KafkaProducer的metadata獲取過程

Metadata

生產者要獲得集群的元數據才能准確無誤地發送消息到對應的TopicPartition里面,獲取metadata是發送的第一步。

所以今天我們講metadata,那么首先看看metadata的對象。

Metadata的字段

image-20210108164301961

主要都寫上了注釋,其中比較核心的是Cluster集群信息

Cluster

image-20210108164546514

上面partition信息比較多,其實從這里就可以很清楚的了解到partition到底是什么東西了。

  • Partition的單位是TopicPartition,每個TopicPartition都有關於自己的Partition信息。
  • 每個Topic有多個Partition
  • Cluster會記錄着每個Topic有哪些Partition是可用的,方便消費者發信息時使用。

PartitionInfo

image-20210108165038922

PartitionInfo的字段清晰明了。

  • leader:一個partition只有一個leader,leader是Node,也就是哪一個集群。
  • replicas:也是followers。拷貝leader的數據,主要用於容災。
  • inSyncReplicas:是ISR集合,只有和leader的數據在一定時間內追趕過leader才能進入該集合。

metadata的假獲取

在kafkaProducer初始化的時候,對metadata數據進行過update,但這次update是假更新。

image-20210108102422591

不妨點進去看看。

image-20210108102641733

cluster僅僅是在新建的 Cluter添加了bootstrap的配置信息,並無任何原參數信息。

真正的第一次獲取

可能你們會好奇kafkaprodecer啥時候才會進行元數據的獲取。

答案:是在第一次發送數據的時候。

我們不妨進入producer的send方法中。

send()

image-20210108162745590

當配置了攔截器就會觸發攔截器的doSend方法,此處我們忽略,主要去看KafkaProducer的doSend方法。

doSend()

image-20210108163324458

在發送信息的第一步,是確定有該topic的metadata。

waitOnMetadata()

image-20210108172052647

如果有數據就直接返回。

image-20210108172118070

同步等待獲取metadata數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM