✅Kafka 为什么这么快?

✅Kafka 为什么这么快?

kafka是一个成熟的消息队列,一直以性能高著称,它之所以能够实现高吞吐量和低延迟,主要是由于以下几个方面的优化,我试着从发送端,存储端以及消费端分别介绍一下。

消息发送

  1. 批量发送:Kafka 通过将多个消息打包成一个批次,减少了网络传输和磁盘写入的次数,从而提高了消息的吞吐量和传输效率。
  2. 异步发送:生产者可以异步发送消息,不必等待每个消息的确认,这大大提高了消息发送的效率。
  3. 消息压缩:支持对消息进行压缩,减少网络传输的数据量。
  4. 并行发送:通过将数据分布在不同的分区(Partitions)中,生产者可以并行发送消息,从而提高了吞吐量。

消息存储

  1. 零拷贝技术:Kafka 使用零拷贝技术来避免了数据的拷贝操作,降低了内存和 CPU 的使用率,提高了系统的性能。

✅什么是零拷贝?

  1. 磁盘顺序写入:Kafka把消息存储在磁盘上,且以顺序的方式写入数据。顺序写入比随机写入速度快很多,因为它减少了磁头寻道时间。避免了随机读写带来的性能损耗,提高了磁盘的使用效率。

  2. 页缓存:Kafka 将其数据存储在磁盘中,但在访问数据时,它会先将数据加载到操作系统的页缓存中,并在页缓存中保留一份副本,从而实现快速的数据访问。

  3. 稀疏索引:Kafka 存储消息是通过分段的日志文件,每个分段都有自己的索引文件。这些索引文件中的条目不是对分段中的每条消息都建立索引,而是每隔一定数量的消息建立一个索引点,这就构成了稀疏索引。稀疏索引减少了索引大小,使得加载到内存中的索引更小,提高了查找特定消息的效率。

  4. 分区和副本:Kafka 采用分区和副本的机制,可以将数据分散到多个节点上进行处理,从而实现了分布式的高可用性和负载均衡。

✅介绍一下Kafka的ISR机制?

消息消费

  1. 消费者群组:通过消费者群组可以实现消息的负载均衡和容错处理。
  2. 并行消费:不同的消费者可以独立地消费不同的分区,实现消费的并行处理。
  3. 批量拉取:Kafka支持批量拉取消息,可以一次性拉取多个消息进行消费。减少网络消耗,提升性能
生产消息 存储消息 消费消息
批量发送 磁盘顺序写入 消费者群组
异步发送 页缓存 批量拉取
消息压缩 稀疏索引 并行消费
并行发送 零拷贝
分区和副本