Kafka的性能好在什么地方:kafka为何这么快?kafka高效读写【重点】

  • kafka不基于内存,而是硬盘存储,因此消息堆积能力更强

  • 顺序写
    • 利用磁盘的顺序访问速度可以接近内存,kafka的消息都是append操作,partition是有序的,节省了磁盘的寻道时间,同时通过批量操作、节省写入次数,partition物理上分为多个segment存储,方便删除;
  • 零拷贝
    • 直接将内核缓冲区的数据发送到网卡传输
    • Producer 生产的数据持久化到 broker,采用 mmap 文件映射,实现顺序的快速写入
      • mmap()系统调用函数会直接把内核缓冲区里的数据「映射」到用户空间,这样,操作系统内核与用户空间就不需要再进行任何的数据拷贝操作
    • Customer 从 broker 读取数据,采用 sendfile,将磁盘文件读到 OS 内核缓冲区后,转到 NIO buffer进行网络发送,减少 CPU 消耗
    • 如何实现零拷贝:【重点】【重点】【重点】【重点】
    • 传统:
      • 读取磁盘文件数据到内核缓冲区;
      • 将内核缓冲区的数据copy到用户缓冲区;
      • 将用户缓冲区的数据copy到socket的发送缓冲区;
      • 将socket发送缓冲区中的数据发送到网卡、进行传输;
  • kafka不太依赖jvm,主要理由操作系统的pageCache,如果生产消费速率相当,则直接用pageCache交换数据,不需要经过磁盘IO
  • 消息压缩
  • Pull拉模式使用拉模式进行消息的获取消费,与消费端处理能力相符
  • 分批发送;批量处理,合并小的请求,然后以流的方式进行交互,直顶网络上限;

猜你喜欢

转载自blog.csdn.net/jiayoudangdang/article/details/125811853