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