kafka 为什么快

  1. 一般的 mq 每个消息都有一个状态,这样每个消息状态改变都要更新,增加了很多随机读写。Kafka 对每个 partition 只有一个指针,而不是保存每个消息的状态,所有在指针后面的消息都是被消费过的消息。这就去掉了很多“确认消息”动作的随机读写,通过一次移动指针,来确认多个消息。
    很多消息中间件,不这么做是因为实现起来有些困难。它需要在 consumer 之间进行协调,为每个 partition 选择 consumer。kafka 依赖 zookeeper 来管理这些工作。

  2. kafka 支持批量消息处理。电脑擅长处理“线性的”扫描和传输,不擅长处理“小的”、“随机”消息。所以,把“小的”消息合并成批量处理,可能会有一点延迟,但吞吐量会上去。

  3. kafka 重试依靠 OS pagecache 中存储的数据。说 kafka 会立刻把数据写到磁盘上,但其实不是这样的。它会写到 kernel 内存池,内存池会异步地写到磁盘上。

  4. 传统 mq 的一些缺点。传统 broker 会共享“消费状态”在 client 和 server 之间,这造成了架构更加复杂。虽然这些 mq 也实现了批处理消息功能,但 broker 会把消息保存到从内存,直到 client 去 ack 这些消息。 ack 是需要一个“很短”的 network round trip,但很多这种“很短”的 nrt 会消费很多时间。
    kafka 不会存储 consumer 状态,因此它是无状态的。当有数据消费完,就会更新 zk 上的 offset 不会告诉 broker 什么。

参考:
- Kafka writes every message to broker disk. Still, performance wise it is better than some of the in-memory message storing message queues. Why is that?
- Kafka 为什么比其它的消息系统快?:上面英文资料的中文翻译,但有的地方翻译不全。

你可能感兴趣的:(kafka)