周五晚上无聊,粗粗撸了一遍代码+性能测试文档,随便扯扯吧。主要分为亮点、槽点、瓶颈分析三块,理解有问题的话欢迎大家指出来。
亮点
-
结构相对清晰,流程简单一目了然
-
每个分区一个逻辑存储的设计,在一定程度上增大了写盘之前处理的并发数(这点会在瓶颈分析部分)
-
自建缓存的设计使得写盘相对可控,不会污染pagecache导致写放大
槽点
-
不可靠。没有落盘就进行ack,在大多数金融级场景里不可接受
-
相对kafka和RocketMQ作为已有产品,解决的问题不够清晰(详见瓶颈分析)
-
多副本没开源。。。其实最早看的动力就是想看下这一块
-
性能测试文档分析有点粗暴,没有对数据结果进行更进一步分析,以及针对已有数据设计更多更有针对性的场景
瓶颈分析
由于某些不可描述的原因,为了避免麻烦,暂时不能详细说解决方案,但是说瓶颈应该没啥问题。由于多副本尚未开源,以下仅讨论存储引擎部分。
背景
分析瓶颈之前,先介绍下各种消息队列存储模型以方便后续分析。
kafka
每一个partition都有日志和索引文件,如下图所示。kafka的瓶颈主要在于,当单机分区数增加或者强制写盘次数增加时,随机写带来的开销。这一点由于机械结构的磁盘需要寻道,会导致表现的特别明显。
所以kafka的瓶颈主要在于: