Kafka-源码解析之-Broker文件存储(三)

摘要:消息存储对于每一款消息队列都非常重要,那么Kafka在这方面是如何来设计做到高效的呢?

Kafka这款分布式消息队列使用文件系统和操作系统的页缓存(page cache)分别存储和缓存消息,摒弃了Java的堆缓存机制,同时将随机写操作改为顺序写,再结合Zero-Copy的特性极大地改善了IO性能。
而提起磁盘的文件系统,相信很多对硬盘存储了解的同学都知道:“一块SATA RAID-5阵列磁盘的线性写速度可以达到几百M/s,而随机写的速度只能是100多KB/s,线性写的速度是随机写的上千倍”,由此可以看出对磁盘写消息的速度快慢关键还是取决于我们的使用方法。
鉴于此,Kafka的数据存储设计是建立在对文件进行追加的基础上实现的,因为是顺序追加,通过O(1)的磁盘数据结构即可提供消息的持久化,并且这种结构对于即使是数以TB级别的消息存储也能够保持长时间的稳定性能。在理想情况下,只要磁盘空间足够大就一直可以追加消息。此外,Kafka也能够通过配置让用户自己决定已经落盘的持久化消息保存的时间,提供消息处理更为灵活的方式。

阅读全文

Kafka-最佳实践之-Producer-性能调优(二)

阅读全文

Kafka-最佳实践之-Broker-性能调优(一)

通过扩展节点资源,来达到千万TPS等海量吞吐诉求,实际上,我们大部分业务可能不需要那么大规模,对于集群资源有限,如何最大可能调优kafka集群性能,下面我们从broker、producer、consumer 3个方面性能相关参数详细解析,实测解密集群如何最大性能化

网络模型相关参数

关于kafka网络模型的原理请查看上一篇博客:Kafka 源码解析之 Server 1+N+M 网络处理模型(一)

阅读全文

Kafka-源码解析之-Producer NIO网络模型(二)

在写这篇文章之前,专门看了一下 Java NIO 相关的内容,只有理解了 Java NIO 模型才能更好地理解 NIO 在 Kafka 中是如何应用的以及 Producer 如何利用 Java NIO 构建其网络模型(不了解的,可以先看一下上一篇文章:谈一谈 Java IO 模型),同时,本文也是对 Producer 整个流程的一个总结,主要讲述以下两个问题:

阅读全文

Kafka 源码解析之 Server 1+N+M 网络处理模型(一)

开源分布式消息队列—Kafka,具备高吞吐量和高并发的特性,其网络通信层是如何做到消息的高效传输的呢?为了解开自己心中的疑虑,就查阅了Kafka的Network通信模块的源码,乘机会写本篇文章。
本文主要通过对Kafka源码的分析来简述其Reactor的多线程网络通信模型和总体框架结构,同时简要介绍Kafka网络通信层的设计与具体实现。

阅读全文