Kafka源码解析(四)- 发送数据流程(2)
上一节介绍了发送数据的大体流程,一共分为八个步骤,本节开始解读几个重要的步骤。
步骤一:等待获取元数据(waitOnMetadata)

waitOnMetadata 方法点进去


这段代码块包含一个do while循环。开始的时候,由于代码第一次进来,是获取不到元数据信息的,这时会去等待sender线程拉去元数据然后再次尝试获取元数据信息。
一直循环下去,直到获取到了元数据跳出while循环。如果整个执行的时间大于最大允许等待的时间,就会抛超时异常。
简单用流程图描述下:

整个过程中有一个awaitUpdate方法,里面描述了如何进行等待的sender线程获取元数据的

点进去看一下

这里面同步等待的过程其实是去等待元数据版本号的更新,而元数据版本号更新的操作是由sender线程来完成的,如果sender线程获取到了元数据,就会更新版本号并且唤醒等待的线程。
Sender线程具体干了些啥,后续解读。
至此,等待拉取元数据流程结束。

浙公网安备 33010602011771号