• Kafka高性能高吞吐的原因总结


    1、磁盘顺序读写

    保证了消息的堆积    

    顺序读写 磁盘会预读,预读即在读取的起始地址连续读取多个页面,主要时间花费在了传输时间,而这个时间两种读写可以认为是一样的。
       

    随机读写 因为数据没有在一起,将预读浪费掉了,需要多次寻道和旋转延迟,而这个时间可能是传输时间的许多倍。

    2、零拷贝

    避免CPU将数据从一块存储拷贝到另外一块存储的技术


        传统的数据复制:

    1.         读取磁盘文件数据到内核缓冲区
    2.         将内核缓冲区的数据copy到用户缓冲区
    3.         将用户缓冲区的数据copy到socket的发送缓冲区
    4.         将socket发送缓冲区中的数据发送到网卡、进行传输

        零拷贝:
            磁盘文件 → 内核空间读取缓冲区 → 网卡接口 → 消费者进程


    3、分区分段+索引


        Kafka的message消息实际上是分布式存储在一个一 个小的segment中的,每次文件操作也是直接操作的segment。为了进一步的查询优化, Kafka又 默认为分段后的数据文件建立了索引文件,就是文件系统上的index文件。这种分区分段+索引的设计,不仅提升了数据读取的效率,同时也提高了数据操作的并行度

    4、批量压缩

    多条消息一起压缩,降低带宽


    5、批量读写

    kafka允许进行批量发送消息,producer发送消息的时候,可以将消息缓存在本地,等到固定条件再发送到kafka

    消息条数满足固定条数
    一段时间发送一次数据压缩

    kafka还支持对消息集合进行压缩,producer可以通过GZIP或Snappy格式对消息集合进行压缩,压缩的好处就是减少传输的数据量,减轻对网络传输的压力。 


    6、优化JVM

    直接操作page cache,不是JVM、避免GC耗时及对象创建耗时,且读写速度更高,进程重启、缓存也不会丢失。


     

  • 相关阅读:
    StatusBarManager中的相关标志位
    兴趣点飞行、地图相册、气体检测飞行 | 复亚智能新功能上线
    Nginx WEB访问与Linux授权约束
    e=vm2:vm in evm
    QT默认自带mscv2017 2019 ,配置vs2022
    什么是Lambda表达式?
    整合MyBatis
    链表oj (7.29)
    cf edu #135 Div.2(A~C)
    crontab配置定时根据名称杀进程
  • 原文地址:https://blog.csdn.net/admans/article/details/125456673