jafka里的filemessageset类的read方法的问题

发布于 2021-11-22 13:40:10 字数 1720 浏览 734 评论 2

@imxylz 你好,想跟你请教个问题:

自己在看jafka的源码时,有个问题不理解,filemessageset的read方法在被Log类的read方法 调用的时候已经是文件内offset了,为什么read方法的实现里要加上this.offset,我感觉这个this.offset就是0.

    public MessageSet read(long offset, int length) throws IOException {
        List<LogSegment> views = segments.getView();
        LogSegment found = findRange(views, offset, views.size());
        if (found == null) {
            if (logger.isTraceEnabled()) {
                logger.trace(format("NOT FOUND MessageSet from Log[%s], offset=%d, length=%d", name, offset, length));
            }
            return MessageSet.Empty;
        }
        return found.getMessageSet().read(offset - found.start(), length);
    }

 public MessageSet read(long readOffset, long size) throws IOException {
        return new FileMessageSet(channel, this.offset + readOffset, //
                Math.min(this.offset + readOffset + size, highWaterMark()), false, new AtomicBoolean(false));
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

伴我心暖 2021-11-24 05:35:59

感谢回复
0

反目相谮 2021-11-24 00:04:15

目前FileMessageSet只有一次镜像,所以第一次镜像的offset应该都是0,这没问题。但为了保持this.offset在FileMessageSet中的语义,所以在读写FileMessageSet镜像的时候都带着offset定义。另外也许将来为了提升性能有多级FileMessageSet镜像的时候,这里offset就必须传入正确的值了(这是不一定为0)。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文