Kafka性能之道

Kafka高性能之道

高效使用磁盘

零拷贝

批处理和压缩

Partition

ISR

 

高效使用磁盘

》顺序写cipan

Append Only(数据不更新,无记录级的数据删除,只会整个segment删除)

》充分利用Page Cache

》支持多Directory(可使用多Drive

 

零拷贝

》传统模式下数据从文件传输到网络需要4次数据拷贝,4次上下文切换和2次系统调用

 

DMA先将文件拷贝到linux内核的Read buffercpu再将Read buffer里面的文件拷贝到Application buffercpu再将Application buffer里面的我呢件拷贝到Socket bufferDMA再将Socket buffer里面的文件拷贝到网络接口的Nic buffer中。

 

Kafka的零拷贝是指cpu不参加了拷贝,它通过NIOtransfer To/transferFrom调用操作系统的sendfile(内核级命令)实现零拷贝。总共发生2次内核数据拷贝,2次上下文切换和1次系统调用,消除了CPU数据拷贝

 

 

批处理和压缩

ProduceConsumer均支持批量处理数据,从而减少了网络传输的开销

Producer可将数据压缩后发送给broker,从而减少网络传输代价。目前支持SnappyGzipLZ4压缩。

 

Partition

》通过Partition实现了并行处理和水平扩展

PartitionKafka(包括Kafka Stream)并行处理的最小单元

》不同Partition可处于不同的Broker(节点),充分利用多机资源

》同一Broker上的不同Partition可置于不同的Directory,如果节点上由多个Disk Drive,可将不同的Drive对应不同的Directory,从而使Kafka从分利用多Disk Drive的磁盘优势

 

ISR

ISR实现了可用性和一致性的动态平衡

replica.lag.time.max.ms = 10000;

replica.lag.max.messages=4000;

ISR可容忍更多的节点失败

Majority Quorum如果要容忍f个节点失败,则需要2f+1个节点

ISR如果要容忍f个节点失败,至少需要f+1个节点

如何处理Replica Crash

Leader crash后,ISR中的任何replica皆可竞选成为Leader

》如果所有replicacrash,可选择让每一个recoverreplica或者第一个在ISR中的replica成为Leader

unclean.leader.election.enable

posted @ 2017-08-30 17:00  一寂知千秋  阅读(237)  评论(0编辑  收藏  举报