kafka原理解析 (3)

 禁用脏leader选举,ISR没有node时,宁可不提供服务也不要未完全同步的node。
 设置最小ISR数量min_isr,保证消息至少要被min_isr个node确认才能提交。
持久化

基于以下几点事实,kafka重度依赖磁盘而非内存来存储消息。

 硬盘便宜,内存贵
 顺序读+预读取操作,能提高缓存命中率
 操作系统利用富余的内存作为pagecache,配合预读取(read-ahead)+写回(write-back)技术,从cache读数据,写到cache就返回(操作系统后台flush),提高用户进程响应速度
 java对象实际大小比理想大小要大,使得将消息存到内存成本很高
 当堆内存占用不断增加时,gc抖动较大
 基于文件顺序读写的设计思路,代码编写简单
在持久化数据结构的选择上,kafka采用了queue而不是Btree
 kafka只有简单的根据offset读和append操作,所以基于queue操作的时间复杂度为O(1),而基于Btree操作的时间复杂度为O(logN)
 在大量文件读写的时候,基于queue的read和append只需要一次磁盘寻址,而Btree则会涉及多次。磁盘寻址过程极大降低了读写性能
参考文档:

kafka官方文档 

Kafka全解析

小白也能看懂的简单明了kafka原理解析

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywfsx.html