Loading...
墨滴

st

2021/04/22  阅读:60  主题:默认主题

Kafka它怎么那么的快?

Kafka它怎么那么的快?

1.背景

Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区、多副本的消息引擎系统。适合应用到高吞吐、低延迟、高并发场景。kakfa 最大的特点就是收发消息非常快,kafka 每秒可以处理几十万条消息,它的最低延迟只有几毫秒。

那么问题来了,它是怎么做到的高吞吐、低延迟?即俗话:“它怎么那么的快?”

2.快的原因有哪些?

2.1合理的设计

  • 物理存储文件分区的设计,规避了单台机器的写入瓶颈
  • 支持多线程消费,整体上增大的并行度

2.2顺序读写

  • 磁盘在顺序读写速度可以和内存持平,甚至更高
  • 使用Linux对于磁盘读写的优化,局部性原理,即read-ahead和write-behind
  • 磁盘缓存,page cache

这里可能会有几个问题:

  • 一个topic有多个不同的消费组,消费速度差距悬殊,会存在什么问题?
  • 或者在线上环境压测业务链路,造成大量测试数据堆积到相同的正式环境的kafka集群,会存在什么问题?

2.3零copy

mmap就是将程序虚拟页面直接映射到页缓存上,这样就无需有内核态再往用户态的拷贝,而且也避免了重复数据的产生。可以通过映射地址加偏移量的方式直接操作。

DMA是什么,全称 Direct Memory Access ,它可以独立地直接读写系统内存,不需要 CPU 介入,像显卡、网卡之类都会用DMA

  • mmap
  • sendfile

Linux2.1版本中的sendfile

Linux2.4 版本的 sendfile + 带 「分散-收集(Scatter-gather)」的DMA。实现了真正的无冗余

2.4批量操作

  • 批量消费,一批一批去拿消息进行消费。

2.5合理使用压缩

  • 生产者者可以开启GZIP压缩,消费者解压,降低存储和网络传输的开销

2.6 讨论其他组件的联系与区别

Kafka:物理上是多的分区的段文件,文件较少的情况下,基本可以顺序读写的水平,当文件数据较多就达到了随机读写的效果。 Rocketmq:物理存储上是一个文件,整体上是顺序读写,不存在kafka的问题。

st

2021/04/22  阅读:60  主题:默认主题

作者介绍

st