目录

Kafka

(https://github.com/apache/kafka)

  • 高吞吐、低延迟

  • 高伸缩

  • 持久性、可靠性

  • 容错性

  • 高并发

为什么快

  • 顺序读写:速度远高于随机读写

  • 零拷贝:使用sendfile跳过用户缓冲区,网络收发消息的流程由磁盘>>内核缓冲区>>用户空间缓冲区>>内核socket缓冲区>>NIC缓冲区变为磁盘>>内核缓冲区>>内核socket缓冲区>>NIC缓冲区。注:mmap跳过了内核缓冲区,实现磁盘>>用户的映射

  • 文件分段:topic分为了多个partition,partition又分为多个segment,所以一个topic实际上保存在很多小文件中,小文件操作轻量,也增加了并发能力

  • 批量发送:消息缓存在内存中,量够了或时间够了再发送,减轻服务端IO

  • 数据压缩:数据压缩减少网络耗时

为什么用消息队列

  • 解耦:上下游无关联

  • 冗余:数据不丢失