kafka
简介
kafka是一个吞吐的分布式消息系统
消息队列
-
生产者负责生产数据
-
消费者负责消费数据
应用场景
-
系统之间解耦合
-
queue模型
-
publish-subscribe模型
-
-
峰值压力缓冲
-
异步通信
Kafka与其他消息队列对比
-
RabbitMQ: 分布式,支持多种MQ协议,重量级
-
ActiveMQ: 与RabbitMQ类似
-
ZenoMQ:以库的形式提供,使用复杂,无持久化
-
Redis: 单机、纯内存,性能好,持久化差
-
Restrel: 单机、特久化
-
Kafka:分布式,较长时间特久化,高性能,轻量灵活
Kafka特点
-
消息系统的特点:生存者消费者模型,FIFO
-
高性能:单节点支持上千个客户端,百MB/s吞吐
-
持久性:消息直接持久化在普通磁盘上且性能好
-
分布式:数据副本冗余、流量负载均衡、可扩展
-
很灵活:消息长时间持久化+Client维护消费状态
Kafka性能好的原因
-
kafka写磁盘是顺序的,所以不断的往前产生,不断的往后写
-
kafka还用了sendFile的0拷贝技术,提高速度
-
而且还用到了批量读写,一批批往里写,64K为单位
非零拷贝
从WIKI的定义中,我们看到“零拷贝”是指计算机操作的过程中,CPU不需要为数据在内存之间的拷贝消耗资源。而它通常是指计算机在网络上发送文件时,不需要将文件内容拷贝到用户空间(User Space)而直接在内核空间(Kernel Space)中传输到网络的方式。
零拷贝
从图中可以清楚的看到,Zero Copy的模式中,避免了数据在用户空间和内存空间之间的拷贝,从而提高了系统的整体性能。Linux中的sendfile()以及Java NIO中的FileChannel.transferTo()方法都实现了零拷贝的功能,而在Netty中也通过在FileRegion中包装了NIO的FileChannel.transferTo()方法实现了零拷贝