Kafka 精妙的高性能设计(下篇)

bba8ada6dc96680325c0336f287d0991.png

若有收获,请记得分享和转发哦

这是《吃透 MQ 系列》的连载:Kafka 高性能设计的下篇。

在 上一篇文章 中,指出了高性能设计的两个关键维度:计算和 IO,可以将它们理解成「道」。同时给出了 Kafka 高性能设计的全景图,可以理解成「术」。

b782e934e2f5ce37db28c4f13a6db223.png

图 1:Kafka 高性能设计的全景图

这篇文章将继续对存储消息和消费消息的 8 条高性能设计手段,逐个展开分析,废话不多说,开始发车。

 1. 存储消息的性能优化手段  

存储消息属于 Broker 端的核心功能,下面是它所采用的 4 条优化手段。

b5240e6f8e98d5c93b63845223275d82.png

1、IO 多路复用

对于 Kafka Broker 来说,要做到高性能,首先要考虑的是:设计出一个高效的网络通信模型,用来处理它和 Producer 以及 Consumer 之间的消息传递问题。

先引用 Kafka 2.8.0 源码里 SocketServer 类中一段很关键的注释:

aa8831c2ea9e913ee27b270455206718.png

通过这段注释,其实可以了解到 Kafka 采用的是:很典型的 Reactor 网络通信模型,完整的网络通信层框架图如下所示:

469c2de61425d0970da180f78e095756.png

图 2:Kafka 网络通信层的框架图

de5c57f385cdc4fca0d66100f483cad6.png

67374275e2409d5161ad793b8c676d8f.png

4027aeb0c1e6e2215e81314e778a5513.png

e1bb8222ae06bcac1a7e7a3c1606c73c.png

d523e675c884970e6e866bc13a868ffe.png

f9dd599c547dae8ae7c40fdfb107666e.png

1f8d9ac6dc3b120135942376c351327e.png

d7ea769c5d2dbd0850eaa6fccc321ba2.png

6bdd36ab354f194f0783f282adca3acf.png

cf32989f5d86d0310b0f3641a19780d2.png

565b165805e5eaadd4ff9e213af24b6c.png

765b0f1b280ea654b227e3e14943c5f5.png

4915fe0e4d0140f366fc205a1232307c.png

1fddd1d63dbcc32270fa776b387eb9e6.png

6810ad07714518adf32228861eefadb3.png

932615f49dbdb21d3cfe7a887048e4bc.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值