文章目录
前言
首先看下官方注释对于Fetcher的解释说明。
作用:用于负责从Kafka服务器获取数据。
Fetcher的请求、响应可能会被多个不同的线程处理。其他操作是使用的单线程(负责拉取消费者的线程)。
源码
接下来分析下它的相关源码。
sendFetches
发起一个获取数据的请求。
Part One
选择合适的节点。保存节点与发送的相关数据。
确保当前已分配分区的TopicPartition信息在leader副本中保存的是最新的。(通过校验上一次消费记录的LeaderAndEpoch与元数据中保存的LeaderAndEpoch是否相同的方式)
- 对分区的获取状态(FetchState)进行判断。
- 校验上一次消费记录的LeaderAndEpoch与元数据中保存的LeaderAndEpoch是否相同。
- 如果不相同,构造一个新的FetchPosition实例,进行之后的校验处理。
- position:FetchPosition类型。表示上一次消费的位置。
- currentLeader:LeaderAndEpoch类型。