二 kafka详解--kafka为什么快( 二 )


批处理可以产生较大顺序磁盘操作和连续内存块 , 不过也产生了较大的网络数据包 , 相应地 , Kafaka 会将消息压缩后发送 , 当消息写入日志时仍然是压缩形式 , 仅由使用者解压缩 。
数据零拷贝另一个问题是过多的字节复制 。//zzs001
一般情况下 , 数据从文件传输到 socket 的数据路径为:磁盘 -》内核的 pagecache -》用户空间缓冲区 -》内核的 socket 缓冲区 -》NIC 缓冲区 。

二 kafka详解--kafka为什么快

文章插图
显然 , 这是非常低效的 , 有四个副本和两个系统调用 。Kafka 使用 sendfile , 允许操作系统将数据从 pagecache 直接发送到网络 , 即磁盘 -》内核的 pagecache-》NIC 缓冲区 。从而避免这种重复复制和系统调用 。更多关于 sendfile 的内容可以参考Efficient data transfer through zero copy 。
二 kafka详解--kafka为什么快

文章插图
需要注意的是 , 由于 TLS/SSL 库是工作在用户空间的 , 所以 , 当启用了 SSL , sendfile 将不能使用 。
基于分区的横向扩展关于这一点 , 在上一篇博客中其实已经提到过 。首先 , 一个 topic 会划分成一个或多个 partition , 这些 partition 一般分布在不同的 broker 实例 。producer 发布的 event 会根据某种策略分配到不同的 partition , 这样做的好处是 , consumer 可以同时从多台 broker 读取 event , 从而大大提高吞吐量 。另外 , 为了高可用 , 同一个 partition 还会有多个副本 , 它们分布在不同的 broker 实例 , 和很多传统的消息系统不同 , Kafka 的副本是可读的 , 即 consumer 不仅可以从主 partition 读取 event , 也可以从副本读取 。//zzs001
二 kafka详解--kafka为什么快

文章插图
结语以上内容是最近学习 Kafka 的一些思考和总结(主要参考官方文档) , 如有错误 , 欢迎指正 。
任何的事物 , 都可以被更简单、更连贯、更系统地了解 。希望我的文章能够帮到你 。
最后 , 感谢阅读 。
参考资料Apache Kafka 官方文档
Benchmarking Kafka vs. Pulsar vs. RabbitMQ: Which is Fastest?
The OpenMessaging Benchmark Framework
The Pathologies of Big Data - ACM Queue
Efficient data transfer through zero copy - IBM Developer
相关源码请移步:https://github.com/ZhangZiSheng001/kafka-demo
本文为原创文章 , 转载请附上原文出处链接:https://www.cnblogs.com/ZhangZiSheng001/p/16788561.html
【二 kafka详解--kafka为什么快】

经验总结扩展阅读