kafka高性能之道

94 阅读1分钟

  Kafka作为一个分布式的消息系统,最大的瓶颈在于磁盘I/O以及网络I/O,Kafka实现高性能主要在这两个方面进行优化。

  首先在生产者生产消息时是批量发送(参数batch.size),加上粘性分区的特性,可以减少网络I/O的次数。数据进行压缩(压缩算法综合来讲lz4最佳)以及序列化可以减少数据大小。

  写到broker的时候落到pagecache,之后再顺序写磁盘,写入速度快,而且broker端使用reactor网络通信模型,可以高效处理请求。

  kafka进行消费的时候,包括副本同步,热数据都是直接从pagecache里去读,之后进行零拷贝,从内核缓冲区拷贝到socket缓冲区,提升了读取的性能。如果有的消费者会消费老的数据,会导致磁盘读并会污染pagecache,这个时候考虑ssd提升读性能。

  数据量比较大时,单台机器的资源有限,kafka对数据进行分区存储,便于在资源不足时进行快速扩容。集群资源有限时,还是要进行扩容,作为分布式存储,是不是能快速扩容就非常重要。

参考

mp.weixin.qq.com/s/a6JQ7yOfW…
mp.weixin.qq.com/s?__biz=MzU…