提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
Kafka的介绍
- kafka是linkedIn开源的分布式消息系统,归给Apache的顶级项目
- kafka主要特点是基于Pull的模式来处理消息的消费的,追求高吞吐量,一开始的目的就是来做日志传输的收集的
- kafka不支持事务,对消息的丢失,错误没有太严格的要求
- 高并发业务场景很好有用到事务的
kafka的特点
- 跨平台
- 分布式
- 实时性
- 伸缩性
一、kafka高性能的原因
- 消息分区:不受单台服务器的限制,可以不受限的处理更多的数据
- 顺序写:顺序写磁盘,可以提供磁盘的利用率
- Page Cache:来提升吞吐量
- zeroCopy
- 后台的异步操作,主动Flush
- 预读的策略,IO的调度
- 消息压缩:减少磁盘IO和网络IO
- 分批发送:将消息打包批量发送,减少网络开销
Page Cache
- Page Cache是OS实现的一种主要的磁盘缓存机制,以此来减少对磁盘I/O的操作
- 将磁盘文件缓存到内存中(MySQL->Redis)
- 如果要从磁盘中读取1.txt,OS不是直接到磁盘而是到PageCache,如果PageCache里有就拿走了,如果没有就向磁盘发出请求,通过I/O获取数据,获取数据后先放入PageCache然后再给需要的请求(操作系统的页缓存是4kb)
- 写入数据的时候先判单PageCache里有没有,没有先写入PageCache,然后OS将PageCache的数据刷到磁盘中(MySQL-Redis,先写MySQL后写Redis)
ZeroCopy(零拷贝)
零拷贝其实就是将磁盘文件主机copy到内存中传输给socket而省去中间在磁盘内存中来回拷贝复制的过程,降低了上下文切换的过程,大大提高了应用程序的性能