Kafka - Must Know

134 阅读1分钟

特性

高吞吐

kafka每秒能处理十万次的消息(单机吞吐10w和rocketmq一样)

零拷贝

传统的「从磁盘读数据然后从网卡发出」的过程:

image.png

使用零拷贝

image.png

DMA

Direct Memory Access, 所谓的零拷贝指的就是利用DMA来实现无「用户态」和「内核态」之间的数据拷贝

传统上硬件访问内存需要CPU控制并通过操作系统调度,但某些硬件可以直接访问内存不用经过CPU和OS:

image.png

支持DMA的硬件有:

image.png

golang中使用DMA零拷贝可以使用Sendfile juejin.cn/editor/draf…

缺点

只分区有序

只是partition有序, 而不是全局有序

不支持延迟消息

可以自己实现, 通过rediszset, 其中score就是要发布的时间, 然后通过一个cronjob定时读比较score和当前时间戳

多Topic性能下降明显

-   在 topic 较少时,Kafka 的吞吐量、延迟更低
-   在 topic 从 68 到 256 的增长过程中, Kafka 性能劣化 98%
-   在 topic 从 68 到 256 的增长过程中, RocketMQ 性能仅劣化 16%

原因在于kafka当topic增多, 每个broker里的partition就会变多, 磁盘随机读写的概率变高

相反,RocketMQ 在物理上只存在一个文件,topic 和 分区都是逻辑概念,所以 topic 增加不会导致 RocketMQ 性能的急剧下降。因此,Kafka 适合少量 topic 的场景, RocketMQ 适合多 topic 场景

Zookeeper的应用

信息存储

/brokers下都是broker的临时节点

/consumers下都是consumer的临时节点

/controllercontroller的临时节点

Partition

一个partition能被消费到的

REF

  1. 零拷贝技术: cloud.tencent.com/developer/a…