Kafka如何实现高并发(4大关键技术)

Kafka是大型架构的必备中间件,下面我重点来详解Kafka如何实现高并发@mikechen

Kafka高并发核心设计

Kafka 的高并发能力并非单一技术的功劳,而是多种设计思想和技术的有机结合。

其分布式架构为横向扩展提供了基础,而高效的消息存储和传输机制,则直接提升了系统的吞吐量、和并发处理能力。

Kafka如何实现高并发(4大关键技术)-mikechen

Kafka 通过将多个 Broker 组成集群的方式,实现了服务的横向扩展。

当数据量和并发请求增加时,可以简单地增加 Broker 节点来分摊压力,提高整体的处理能力和容错性。

每个 Topic 可以被划分为多个独立的分区,每个分区可以存储在不同的 Broker 上。

这使得同一个 Topic 的消息能够被并行地写入和读取,极大地提高了吞吐量。

 

顺序写入

Kafka 的每个分区在物理磁盘上,以日志(Log)文件的形式存储消息。

如下图所示:

Kafka如何实现高并发(4大关键技术)-mikechen

新的消息总是被追加到日志文件的末尾,这是一个纯粹的顺序写入操作。

相比随机写入,顺序写入的性能提升非常显著,尤其是在机械硬盘上。

顺序写入避免了磁盘磁头的随机寻道,将大部分时间都用于数据传输,极大地提高了磁盘的写入效率。

 

消息压缩

生产者在发送消息之前,可以使用各种压缩算法,对消息进行压缩,减小消息的体积。

压缩后的消息体积更小,在网络传输过程中占用的带宽更少,这在高并发场景下尤为重要,可以避免网络成为瓶颈。

Kafka如何实现高并发(4大关键技术)-mikechen

比如:

GZIP:压缩比高,适合对传输体积要求高的场景;

Snappy:压缩速度快,Kafka 默认推荐;

LZ4:兼顾压缩比和速度;

ZSTD:新兴算法,压缩效率极高。

 

 

发送端异步机制

Kafka 生产者采用异步发送机制,发送消息时不阻塞等待 Broker 确认。

在异步模式下,生产者将消息放入一个缓冲区(Buffer),然后由后台线程批量地将缓冲区中的消息发送给 Broker,而无需等待 Broker 的响应。

Kafka如何实现高并发(4大关键技术)-mikechen

异步发送允许生产者在等待 Broker 响应之前继续发送下一条消息,极大地提高了发送端的吞吐量。

并且,生产者无需等待每个消息的确认,从而降低了单个消息的发送延迟。

 

页缓存技术

Kafka 并非频繁调用磁盘写入,而是借助 Linux 系统的页缓存机制,将数据先写入内存页缓存,系统再异步刷盘。

页缓存:是操作系统内核,为了优化文件 I/O 而采用的一种技术。

大致流程,如下:

Kafka如何实现高并发(4大关键技术)-mikechen

Producer 将消息写入 Kafka;

Kafka 将消息追加写入 log 文件;

实际写入通过 Page Cache,由 OS 控制磁盘刷写节奏;

Kafka 提供 log.flush.interval 控制强制刷盘时机。

Kafka Broker 将消息数据存储在磁盘上,当消费者需要读取消息时,操作系统会将磁盘上的日志文件内容加载到页缓存中。

由于大部分的读操作都可以直接从内存的页缓存中完成,这极大地提高了读取性能,降低了磁盘 I/O 的压力。

总之,Kafka 实现高并发并非依赖于单一的技术,而是巧妙地结合了分布式架构、高效存储机制以及一系列性能优化手段。

评论交流
    说说你的看法