当前位置: 首页 > 网络应用技术

Kafka数据持久性和有效的传输设计原理

时间:2023-03-09 12:59:58 网络应用技术

  解决大量数据的真实时间传输的问题。例如:

  这要求Kafka系统可以实时支持分区,分发和处理已接收的数据。此外,当数据发送到其他服务系统时,KAFKA系统必须在机器中具有故障 - 耐受性保证。Kafka系统更像是日志数据库。

  KAFKA依赖文件系统和操作系统页面的缓存。它放弃了Java桩缓存机构。同时,磁盘被随机写入磁盘序列,并将数据传输到数据的“零拷贝”技术到插座。

  慢速磁盘的主要原因是磁盘驱动程序的吞吐量与磁盘搜索方法密切相关。例如,在7200 rpm磁盘上,其线性写作性能是随机写作性能的6000倍。磁盘的读取和写入是可以预测的,可以通过OS优化磁盘预读和写入技术(缓冲区)进行优化。

  预阅读:从磁盘到缓冲区阅读大型零件。

  以后写:将数据放入缓冲区中,然后将批次写入物理磁盘。

  相关的技术讨论:

  大数据的病理-ACM队列

  为什么磁盘读写慢慢?

  机械硬盘采用了传统的磁头探针结构。读写时需要经常寻求它,这需要频繁的磁头旋转和探测。寻址速度会影响随机写作速度。

  存储方法:Kafka立即将数据写入文件系统中,然后将数据刷到操作系统中。

  根据磁盘和JVM的性质,KAFKA使用文件系统和页面缓存处理数据,而不是该过程中的缓存数据。OS内核会自动刷到磁盘中。在它们的操作中,数据编写文件系统的操作意味着数据已将其传输到OS内核的分页缓存。

  使用页面缓存:通过自动访问所有空闲物理内存,至少是可用页面缓存的两倍。

  存储字节数据:仅存储一系列紧凑数据字节而不是单个Java对象,该对象可能会使内存比率增加一倍。

  上述KAFKA数据存储方法的优点:

  32GB计算机上的页面缓存可能会达到28-30GB而不会触发GC。需要在内存中重新加载(因为10GB缓存可能需要10分钟,持续10分钟),否则您需要从文件中重新连接(这可能意味着不良的初始性能)。

  此存储方法简化了代码,因为所有维护页面缓存的逻辑和文件系统之间的一致性是由操作系统完成的,这通常比在过程中维护更有效和正确。

  KAFKA消息发送(写作)不是一个发送,而是消息收集(批次)发送。相似地,经纪人收到消息收集,消费者消费消息收集。此方法可以减少经纪人中的IO时间数量。

  Kafka通过生产商,经纪人和消费者之间的标准二进制消息格式传输。可以在没有修改的情况下传输数据块。

  经纪人中的消息一起存储在文件中。在Linux操作系统中,传统文件发送到套接字过程,如下所示:

  可以看出,传统方法已发送到套接字过程,并且数据复制了四次,并且两个系统调用效率非常低。

  将文件数据通过sendfile发送到套接字,以避免上述方法中的重复副本。由于sendfile系统呼叫可以将数据直接传输到页面上。优化后,您只需要将数据复制到网络卡的缓冲区即可。

  页面缓存和sendfile的这种组合意味着磁盘上没有阅读操作,因为消费者直接从缓存中获取数据。对于更多的sendfile技术,请阅读本文。

  批处理消息压缩是为了降低由于网络带宽而引起的交叉网络数据传输的效率。KAFKA支持的数据压缩格式包括GZIP,Snappy,LZ4和Zstandard标准压缩协议。