再见,RabbitMQ,你好,Kafka!

                                                                                                                                                                                                                                                                                                                                                               

                                   

                                                                                                                                               

容器、Kubernetes、DevOps、微服务、云原生,这些技术名词的频繁出现,预兆着新的互联网技术时代的到来,大数据高并发将不再遥远,而是大部分项目都必须具备的能力了,而消息队列是必备的了。成熟的消息队列产品很多,说到海量数据下高吞吐高并发,Kafka不是针对谁,毋庸置疑的首选!

Kafka介绍

Kafka是一个分布式的基于发布订阅的消息队列,有着无与伦比的消息处理能力,相比与其他消息系统,具有以下特性:

高吞吐:普通服务器每秒几十万条消息

低延迟:TB级数据延迟最低只有几毫秒

高并发:支持数千个客户端同时读写

可扩展:Kafka集群支持热扩展

可靠性:消息被持久化到本地磁盘

容错性:允许集群中节点故障

正是因为Kafka优异的表现,现在已经被广泛应用于海量日志收集、大数据处理、流式处理等场景!下面我们来探讨下,Kafka到底是如何做到这么高的吞吐量和性能的呢?

页缓存技术 + 磁盘顺序写

首先,Kafka的消息数据是写在硬盘上的,保证了消息数据的可靠性,但写硬盘还能保证几十万条/秒的消息处理速度,是怎么做到的?

因为Kafka在这里有极为优秀和出色的设计!为了保证数据的写入性能,Kafka是基于操作系统的页缓存来实现文件写入的。

页缓存page cache,是操作系统自己管理的内存缓存,也叫os cache。写入消息时,是直接写入这个页缓存里,然后由操作系统自己决定什么时候把页缓存里的数据真的刷入磁盘文件中。

这样一来,消息写入性能就变成了写内存,不是在写磁盘,请看下图。

Kafka高性能写入的再一个设计是磁盘顺序写。一般磁盘写入都是随机写,随便找到文件的某个位置来写数据,这样的性能非常差,但是追加文件末尾按照顺序的方式来写数据的话,其写入性能跟写内存的性能差不多。

总结下, Kafka在写数据的时候,一方面基于了操作系统的page cache来写数据,另一方面是采用磁盘顺序写的方式,就实现了写入数据的超高性能,才能做到在普通服务器上每秒写入几十万条消息。

零拷贝技术

解决了写入问题,那消息读取呢?频繁的从磁盘读数据然后发给消费者,性能又是如何保证的?Kafka为了解决这个问题,在读数据的时候是引入零拷贝技术。

先看图1是常规的硬盘读写流程,操作系统读取硬盘数据后放在OS Cache,然后需要拷贝一次到Kafka进程,然后Kafka再将数据拷贝到Socket缓存才能发送到网卡,这样流程的性能当然没有保障。

再看图2, Kafka的设计为直接将操作系统OS Cache中的数据发送到网卡,跳过了两次拷贝数据的步骤,Socket缓存中仅仅会拷贝一个描述符过去,不会拷贝数据到Socket缓存,大大提升了数据读取性能。

Kafka作为海量数据大并发高吞吐的消息队列首选,在底层架构设计上有太多的技术点,要想驾驭Kafka队列,要想在高端笔试面试中占据优势,你需要一波硬核训练营!下面邀请到资深架构师Clay老师为大家带来的《Kafka硬核训练营》,赶紧扫码进群免费学习起来,还有微软MVP大佬领衔答疑交流!

Day1

搭建Kafka集群,基于.NET Core对接实操,核心工作流程深入,理解Kafka数据分区策略和机制

Day2

Kafka单机10w+吞吐演示和详细读写原理解读,TB级海量数据存储和数据压缩策略剖析

Day3

图解数据可靠性保证原理,优化Kafka的高可用配置实践,从架构层揭秘原理

3天时间,完成Kafka的实战和核心突破,金九银十跳槽季领先一步!为更好的完成课程学习,下面还为你准备了配套的预习资料,扫码添加助教小姐姐领取吧!

获取本文全套学习资料

扫码添加

领取人数较多,添加以下号码也可免费领取哦!

微信号:18672997769

微软MVP组建的.Net社区

你加入了吗?

微软MVP:Eleven组建

国内首屈一指的.Net活跃社区

完整配套的学习资料

最新最热的技术文章

社区内优质岗位直推

全部免费奉送给大家

优质内容持续更新中

戳以下文章立即获取

????????????

禁止外传!社区内部VIP干货资料自取

(课程视频+面试题+技术专刊+岗位内推)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值