• 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耗时及对象创建耗时,且读写速度更高,进程重启、缓存也不会丢失。


     

  • 相关阅读:
    手机机型响应式设置2
    L2t*+NPS
    【牛客网】安全—加密和安全
    【HDFS】JN回滚大量edit日志导致Namenode主备切换的故障记录
    CDR插件开发之Application(应用程序)
    GO—函数
    静态ip该如何靠谱的ip代理
    Qt应用程序打包步骤(完美解决)
    2022高压电工操作证考试题库及模拟考试
    亚马逊云科技Serverless构建的实时数仓解决方案,助力猎豹降低30%成本
  • 原文地址:https://blog.csdn.net/admans/article/details/125456673