交通信用网站建设,遵义做网站优化,中国风网站配色方案,在广州学编程有名气的培训班高性能的多分区、冗余副本集群架构 高性能网络模型NIO 简单架构设计#xff1a; 详细架构设计#xff1a; 高性能的磁盘写技术 高性能的消息查找设计 索引文件定位使用跳表的设计 偏移量定位消息时使用稀疏索引#xff1a; 高响应的磁盘拷贝技术
kafka采用sendFile()的… 高性能的多分区、冗余副本集群架构 高性能网络模型NIO 简单架构设计 详细架构设计 高性能的磁盘写技术 高性能的消息查找设计 索引文件定位使用跳表的设计 偏移量定位消息时使用稀疏索引 高响应的磁盘拷贝技术
kafka采用sendFile()的零拷贝方式磁盘DMA到内存然后一次cpu copy到socket缓存一次DMA到网卡完成数据发送。 粘性分区算法
如下图6条消息采用key可能分三次发送到三个不同的分区需要3次网络请求。如果没有key将封住成一个批次发送。这样一次网路请求就可以发送多条消息大大提高了效率。 批处理、内存池设计
将多个同分区的消息一次批量发送到server大大减少了网络IO的消耗。
BufferPool 总大小为16k固定大小加上一个avaliableMemory存储大消息每个batch申请内存释放内存循环往复。 多线程协同设计
图是发送消息主线程和发送网络请求sender线程配合获取元数据的流程: 高性能、安全的数据结构
RecordAccumulator中存储了每个分区对应的消息队列在发送消息时会经常读取队列将消息加入到队列中。所以在batches设计时需要考虑到高性能、高并发的。 private final ConcurrentMapTopicPartition, DequeProducerBatch batches; 分段锁的设计思想 粘包黏包解决
读取数据时kafka采用了4字节标识数据长度来避免粘包黏包的问题