前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Kafka 为什么快?(5)

Kafka 为什么快?(5)

作者头像
兜兜毛毛
发布于 2021-04-01 23:52:03
发布于 2021-04-01 23:52:03
2860
举报
文章被收录于专栏:兜兜毛毛兜兜毛毛

通过以上文章已经把kafka基本概念整理了一下,从生产者到Broker消费者。下面来简单总结一下,为什么kafka能做到这么高的吞吐。

MQ的消息存储有几种选择,一种是内存,如ZeroMQ,速度很快但是不可靠。一种是第三方的数据库,会产生额外的网络消耗,而且数据库出问题会影响存储。所以最常见的是把数据放到磁盘上存储。

但我们也知道,磁盘的I/O是比较慢的,选择磁盘做为存储怎么实现高吞吐、低延迟、高性能的呢?

(案例显示在普通服务器上可以达到百万级TPS)

https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-three-cheap-machines

总结起来主要有4点:磁盘顺序I/O、索引机制、批量操作和压缩、零拷贝。

顺序读写

在之前讲mysql存储时提到了一种思路,写数据文件data file,和用来做崩溃恢复的redo log,区别在哪?

顺序I/O和随机I/O。

Kafka的message是不断追加到本地磁盘文件末尾的,而不是随机的写入,这使得Kafka写入吞吐量得到了显著提升。

内存I/O是不是一定比磁盘I/O快呢?

在本篇文章中有做了对比:

https://queue.acm.org/detail.cfm?id=1563874

这张图片现实,在一定条件下测试,磁盘顺序读写可以达到53.2M每秒,比内存的随机读写要快。

索引

时间索引与offset索引

批量读写和文件压缩

kafka把所有消息都变成一个批量的文件,并进行合理的批量压缩,减少网络IO损耗。

零拷贝

详情可参考:https://cloud.tencent.com/developer/article/1774592

主要通过以上几点来提升kafka吞吐量:

  • 从磁盘读取(顺序I/O)
  • 搜索查找(索引)
  • 批量读写和数据压缩
  • 调整网络I/O方式。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 顺序读写
  • 索引
  • 批量读写和文件压缩
  • 零拷贝
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文