Kafka源码分析之ProducerBatch

在前面的Sender源码阅读中,发现在kafka发送消息过程中,先获取消息,同时还检查了集群的信息,然后通过KafkaClient来完成发送。这一篇中将对kafka的消息组织结构,包括TopicPartition、ProducerBatch、Metadata等进行分析。

1.TopicPartition

TopicPartition的实现比较简单,将topic的名称以及对应的分区号进行了封装。只包含了以下几个变量,并重写了hashCode和equals方法。

 private int hash = 0;
 private final int partition;
 private final String topic;

2.ProducerBatch

ProducerBatch用于存储一系列要发送的消息,其相关的数据组织结构如下所示。
在这里插入图片描述

2.1 Thunk/FutureRecordMetadata

Thunk是ProducerBatch的内部类,表示一个消息块。它包含了一个FutureRecordMetadata对象,表示发送记录后返回的结果。
FutureRecordMetadata实现了Future接口。包含了以下三个重要的方法

 @Override
    public RecordMetadata get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
   
        // Handle overflow.
        long now = time.milliseconds();
        long timeoutMillis = unit.toMillis(timeout);
        long deadline = Long.MAX_VALUE - timeoutMillis < now ? Long.MAX_VALUE : now + timeoutMillis;
        boolean occurred = this.result.await(timeout, unit);
        if (!occurred)
            throw new TimeoutException("Timeout after waiting for " + timeoutMillis + " ms.");
        if (nextRecordMetadata != null)
            return nextRecordMetadata.get(deadline - time.milliseconds(), TimeUnit.MILLISECONDS);
        return valueOrError();
    }

get方法中,通过result.await来等待直到有请求结果返回。

RecordMetadata value() {
   
        if (nextRecordMetadata != null)
            return nextRecordMetadata.value();
        return new RecordMetadata(result.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值