其实这里的内容与Kafka的高吞吐有些交集,可以结合着看。
Kafka学习笔记 --- Kafka是如何实现高吞吐率的?
高性能主要从两个方面来剖析:
一、架构层次
-
分区
我们知道Kafka是个分布式集群的系统,整个系统可以包含多个broker,每个topic会有多个分区。Kafka将分区均匀的分配到整个集群,当生产者向对应主题传递消息时,消息通过负载均衡机制传递到不同的分区以减轻单个服务器实例的压力。
二、实现技术层次
— 实现层次
-
异步化的线程模型;
-
高性能的异步网络传输;
-
自定义的私有传输协议;
-
自定义的序列化、反序列化;
-
批量处理
-
-
批量处理是一种非常有效的高性能实现方式。虽然Kafka只提供单条发送的API,send方法,当我们调用Kafka的API,Producer的send方法的时候,它不会立即发送这条消息,而是会把消息暂时在内存中缓存起来,然后等待一批(按照数据量或者预计的时间触发)一次性发送到Broker。
-
Broker在处理消息时,是把批量发送的消息,当作一个“Batch”来处理,Broker在整个处理流程中,无论是读写磁盘,还是复制副本,都不会将批次消息进行一一拆开,而是当作一条消息来处理。
-
-
顺序的磁盘的读写
-
-
磁盘IO的速度比较慢的,所以对于Broker来说,磁盘IO是性能的瓶颈;
-
对于磁盘来说顺序的读写要远好于随机读写,减少了寻址的时间。
-