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

0d6cfba4cf0275de20d2b8e43889581a.png

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

Kafka 的高性能设计可以说是全方位的,从 Prodcuer 、到 Broker、再到 Consumer,Kafka 在掏空心思地优化每一个细节,最终才做到了这样的极致性能。

这篇文章我想先带大家建立一个高性能设计的思维模式,然后再一探究竟 Kafka 的高性能设计方案,最终让大家更体系地掌握所有知识点,并理解它的设计哲学。

 1. 如何理解高性能设计?  

我们暂且把 Kafka 抛在一边,先尝试理解下高性能设计的本质。

有过高并发开发经验的同学,对于线程池、多级缓存、IO 多路复用、零拷贝等技术概念早就了然于胸,但是返璞归真,这些技术手段的本质到底是什么?

这其实是一个系统性的问题,至少需要深入到操作系统层面,从 CPU 和存储入手,去了解底层的实现机制,然后再自底往上,一层一层去解密和贯穿起来。

但是站在更高的视角来看,我认为:高性能设计其实万变不离其宗,一定是从「计算和 IO」这两个维度出发,去考虑可能的优化点。

那「计算」维度的性能优化手段有哪些呢?无外乎这两种方式:

1、让更多的核来参与计算:比如用多线程代替单线程、用集群代替单机等。

2、减少计算量:比如用索引来取代全局扫描、用同步代替异步、通过限流来减少请求处理量、采用更高效的数据结构和算法等。

再看下「IO」维度的性能优化手段又有哪些? 可以通过 Linux 系统的 IO 栈图来辅助思考。

bad543bd58e780054d2d8b8863f075e6.png

图 1:Linux 系统的 IO 栈图

686fcddcff32a1e7036fcef128a8489b.png

06988c805afff403d88cd24d11fe01ac.png

9f38c32bc16dabcd9088aebd6fb02731.png

d5a5f555be18fd31ea681e08a7fd3070.png

c69ae29739fc63ebd79e92372d6c336f.png

3b63f3a3cf96b2df57af41312b6e4d4e.png

8093d25b776f1877036cf104a032d119.png

665f439ff60172e84a9e9016a7b64785.png

5d00ff7aa2f970664f1b15e20b356833.png

8d2e9143dd6836171646daff4d842d49.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值