Kafka是实现高并发架构的核心技术,也是大型架构的必备技能,今天就重点谈谈Kafka如何实现高并发@mikechen
分布式架构
Kafka 是一个分布式的消息系统,消息存储、和处理分布在多个节点上。
通过分布式架构、和集群的方式,可以极大的提升并发能力。
比如:Topic 分区 (Partitioning),每个 Topic 可以分为多个分区(Partition),消息会被分散存储在不同的分区中。
每个分区可以独立地读写操作,多个分区之间可以并行处理,从而实现高并发。
并且,Kafka 集群包含多个 Broker,每个 Broker 负责管理部分分区的数据。
增加 Broker 数量,可以提高 Kafka 的吞吐量、和并发能力。
磁盘顺序写
顺序写:是Kafka实现高吞吐量、高并发的关键技术。
Kafka通过将消息,追加到日志文件末尾(append)的方式,写入到磁盘上的日志文件末尾,而不是随机地在磁盘上读写数据。
Kafka这种方式,极大地减少了磁盘寻道的时间,提高了I/O效率。
为什么要采用“顺序写”这种方式呢?
下面我接着谈:当生产者发送消息到Kafka时,Kafka会将消息追加到相应分区的当前活跃的分段文件末尾。
这个过程是顺序的,不需要在磁盘上进行大量的寻道操作。
磁盘寻道:是磁盘I/O中最耗时的操作之一,顺序写可以最大限度地减少磁盘寻道次数,因为磁头只需要沿着磁盘的轨道顺序移动即可。
并且,顺序写可以充分利用磁盘的带宽,提高数据写入的速度,从而提高Kafka的吞吐量。
所以,Kafka采用”顺序写“,来提升吞吐量、和并发量,这是一大关键点。
零拷贝
Kafka在消息传输过程中,使用了零拷贝技术。
在传统的数据传输中(没有零拷贝的情况下),数据需要在内核空间、和用户空间之间来回传递。
通常会经历以下几个步骤,如下图所示:
- 首先,数据从磁盘读取到内核缓冲区;
- 其次,数据从内核缓冲区拷贝到用户空间的应用程序缓冲区;
- 然后,应用程序对数据进行处理后,再将数据从用户缓冲区拷贝回内核的网络缓冲区;
- 最后,数据通过网络接口发送到客户端。
这种数据传输模式需要 4 次数据拷贝、和 2 次上下文切换,既消耗了 CPU,又占用了内存带宽。
采用零拷贝,可以减少了内核空间、和用户空间之间的数据拷贝次数,从而提高了传输效率。
除此之外,Kafka通过结合高效的存储结构、分区机制、生产者和消费者的…优化等等,从而,实现了高并发的消息处理能力。
mikechen睿哥
mikechen睿哥,十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》