Kafka
(https://github.com/apache/kafka)
高吞吐、低延迟
高伸缩
持久性、可靠性
容错性
高并发
为什么快
顺序读写:速度远高于随机读写
零拷贝:使用
sendfile
跳过用户缓冲区,网络收发消息的流程由磁盘>>内核缓冲区>>用户空间缓冲区>>内核socket缓冲区>>NIC缓冲区
变为磁盘>>内核缓冲区>>内核socket缓冲区>>NIC缓冲区
。注:mmap
跳过了内核缓冲区,实现磁盘>>用户
的映射文件分段:topic分为了多个partition,partition又分为多个segment,所以一个topic实际上保存在很多小文件中,小文件操作轻量,也增加了并发能力
批量发送:消息缓存在内存中,量够了或时间够了再发送,减轻服务端IO
数据压缩:数据压缩减少网络耗时
为什么用消息队列
解耦:上下游无关联
冗余:数据不丢失