-
高性能的多分区、冗余副本集群架构
-
高性能网络模型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字节标识数据长度来避免粘包黏包的问题:文章来源:https://www.toymoban.com/news/detail-716025.html
文章来源地址https://www.toymoban.com/news/detail-716025.html
到了这里,关于图解Kafka高性能之谜(五)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!