网站免费空间申请单页网站制作工具
-  
高性能的多分区、冗余副本集群架构
 

-  
高性能网络模型NIO
 
简单架构设计:

详细架构设计:

-  
高性能的磁盘写技术
 

-  
高性能的消息查找设计
 
索引文件定位使用跳表的设计
偏移量定位消息时使用稀疏索引:

-  
高响应的磁盘拷贝技术
 
kafka采用sendFile()的零拷贝方式,磁盘DMA到内存,然后一次cpu copy到socket缓存,一次DMA到网卡完成数据发送。

-  
粘性分区算法
 
如下图,6条消息采用key可能分三次发送到三个不同的分区,需要3次网络请求。如果没有key将封住成一个批次发送。这样一次网路请求就可以发送多条消息,大大提高了效率。

-  
批处理、内存池设计
 
将多个同分区的消息,一次批量发送到server,大大减少了网络IO的消耗。
BufferPool 总大小为16k固定大小加上一个avaliableMemory(存储大消息),每个batch申请内存释放内存,循环往复。

-  
多线程协同设计
 
图是发送消息主线程和发送网络请求sender线程配合获取元数据的流程:

-  
高性能、安全的数据结构
 
RecordAccumulator中存储了每个分区对应的消息队列,在发送消息时会经常读取队列将消息加入到队列中。所以在batches设计时需要考虑到高性能、高并发的。
private final ConcurrentMap<TopicPartition, Deque<ProducerBatch>> batches;
-  
分段锁的设计思想
 

-  
粘包黏包解决
 
读取数据时kafka采用了4字节标识数据长度来避免粘包黏包的问题:

