kafka是怎么把消息写入磁盘,又把磁盘的消息拿出来发给用户进程的

讲解下kafka是怎么把消息写到磁盘,怎么把消息从磁盘上拿走发给客户端的,看下图,这里用到了mmap,零拷贝的知识。

消息存储:

客户端c发来了消息,正常流程来讲这条消息是先到kernal内核中的,kafka先要把消息读取到自己里面来做个数据的加工的,然后在写道kernal上,keranal在输出到磁盘上的,看见没有这经历了好几次过成的。这时候mmap来了,kafka和磁盘直接建立通道就是mmap,有消息过来好kafak通过epol事件驱动就会知道的,消息处理完之后直接写入到mmap,过来一消息追加下。。。。,这些消息直接写入到磁盘的segment文件中,写满了这个mmap就关掉重新在搞一个,在直接写入到segment上。

消息消费:

有客户端要消费消息了,正常流程来讲这个请求也是先打到kernal内核上,kafaka写发起个read到kernal上,keranl发起read到磁盘segment上,kafka拿到消息后在write到kernal上,最后在到消费端的进程上去,这也经历了好几步骤,因为消费的时候kafka不需要对数据进行加工,相当于直接把磁盘上的数据丢给消费进程就可以了。这时候用了零拷贝sendFile节约了好几步。kafka直接给keranl内核发送要调用sendfile的命令,内核直接把数据从磁盘上读出来后直接把消息丢给客户端的进程就可以了。

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值