コード例 #1
0
    private void postReceiveMessage(
        final FetchRequest request, final MessageIterator it, final Partition partition) {
      // 如果offset仍然没有前进,递增重试次数
      if (it.getOffset() == 0) {
        request.incrementRetriesAndGet();
      } else {
        request.resetRetries();
      }

      // 非自动ack模式
      if (!partition.isAutoAck()) {
        // 如果是回滚,则回滚offset,再次发起请求
        if (partition.isRollback()) {
          request.rollbackOffset();
          partition.reset();
          this.addRequst(request);
        }
        // 如果提交,则更新临时offset到存储
        else if (partition.isAcked()) {
          partition.reset();
          this.ackRequest(request, it, true);
        } else {
          // 都不是,递增临时offset
          this.ackRequest(request, it, false);
        }
      } else {
        // 自动ack模式
        this.ackRequest(request, it, true);
      }
    }