KAFKA源码阅读———处理ProduceRequest,FetchRequest

本文详细介绍了Kafka中KafkaApis类如何处理ProduceRequest和FetchRequest。在处理FetchRequest时,根据requestInfo从日志中读取数据,并可能更新ISR和Follower的offset。在处理ProduceRequest时,根据requiredAcks的值决定是否等待Follower同步,异常处理策略也有所不同。整个过程涉及offset管理、延迟请求以及 ISR 的维护。
摘要由CSDN通过智能技术生成

KafkaApis类中有个handle函数,这里是消息分发中心,根据request中的requestId采用不同的处理方式。当requestId == RequestKeys.produceKey时,通过函数handleProducerOrOffsetCommitRequest处理request。
这个函数中把ProducerRequest和OffsetCommitRequest请求都作为生产消息进行处理。

//如果requestId == OffsetCommitKey,则该请求是 offsetCommitReqeust,否则是produceRequest
    val (produceRequest, offsetCommitRequestOpt) =
      if (request.requestId == RequestKeys.OffsetCommitKey) {
        val offsetCommitRequest = request.requestObj.asInstanceOf[OffsetCommitRequest]
        OffsetCommitRequest.changeInvalidTimeToCurrentTime(offsetCommitRequest)
        //如果是offsetCommitRequest,根据commit的topic,partition,groupId生成一个请求
        (producerRequestFromOffsetCommit(offsetCommitRequest), Some(offsetCommitRequest))
      } else {
        (request.requestObj.asInstanceOf[ProducerRequest], None)
      }

producerRequestFromOffsetCommit函数根据offsetCommitRequest构造出相应的ProducerRequest:consumer提交消费进度时,根据groupId映射到相应的partition,向partition的leader发送offsetCommitReuqest,其中包含(topicAndPartition,offset)的键值对;根据groupId,topicAndPartition生成key,offset作为bytes组合成一条Message,并返回以该message作为data的ProducerRequest。所以,Off

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值