做婚礼设计在哪个网站下载素材,建设部四库一平台网站,做的比较好网站有哪些,中国变装网站教你如何做女人前言
原本自以为阅读了很久kafka的源码#xff0c;对于kafka的了解已经深入到一定程度了#xff0c;后面在某大厂的面试中#xff0c;面试官询问我#xff0c;如果需要提升kafka的性能#xff0c;应该怎么做#xff0c;我发现我能答上来的点非常的少#xff0c;也暴露了…前言
原本自以为阅读了很久kafka的源码对于kafka的了解已经深入到一定程度了后面在某大厂的面试中面试官询问我如果需要提升kafka的性能应该怎么做我发现我能答上来的点非常的少也暴露了我在学习时候缺少总结导致要用的时候很难一次性快速表达出来也让我错过了一个大厂的offer尽管我在面试之后迅速做了相关问题总结而且已经过去了半年但是我还是会时不时想起这件事所以想专门写一篇kafka性能提升的总结文章来超度那件事让它不要再纠缠与我了 一 生产者
1.1 配置优化
1 增加每个分区的消息批的大小 batch.size: 16k适当增加批的最大缓存时间 linger.ms让生产者累积器中的每个Sender可以累积更多的消息再发送减少网络请求次数同时也能增加broker硬盘IO的存储效率每次顺序写入的多
2 增加生产者中累积器的内存缓冲区buffer.memory: 32M大小当累积器的缓冲区用完时也会吧消息发送给broker通过增加增加生产者中累积器也可以减少网络请求次数
4 压缩消息compression.typenone-默认不压缩可以选择 gzip、snappy、lz4、zstd 等。减少网络传输的数据量但是会增加cpu负担可以在网络流量和cpu之间找到一个平衡点
5 在必要条件时可以吧ack设置为0但是会使得丢消息的概率提高 1.2 代码优化
1 多线程生产多个线程使用多个生产者并行生产消息
2 异步生产生产者发送消息本身涉及网络IO而且除了异常处理外我们不太需要关注返回结果所以可以通过线程池等异步生产消息避免堵塞主线程提升系统整体性能
3 批量生产和压缩尽管kafka生产者本身已经通过批量生产做了性能优化但是这个并不妨碍我们在必要的时候自行积累数据批量发送甚至手动压缩来减少网络IO提升整体吞吐量毕竟kafka的批量生产和压缩都是通用的算法有时候我们可能根据业务数据的特点使用更加高效的批量生产和压缩 二 消费者
2.1 配置优化
1 调整每次拉取消息的量fetch.min.bytes和fetch.max.bytes减少网络IO 2.2 代码优化
1 并行处理消费者内部使用多线程处理消息。 2.3 部署优化
1 通过分区和消费者的关系可以知道如果分区数和消费者数相同时候可以充分利用并行处理能力 三 broker
3.1 配置优化
1 节点配置的优化比如IO线程数handler的数量num.io.threads)网络线程数Processor的数量num.network.threads还有套接字缓冲区的大小socket.send.buffer.bytes/socket.receive.buffer.bytes
3 对kafka的jvm进行调优比如内存和 GC方面优化
5 优化分区副本的放置确保高可用的同时避免跨数据中心的复制延迟 3.2 部署优化
1 适当增加topic的分区数充分运用到多个broker资源和broker内部的并行处理能力但需注意过多的分区可能导致的问题。
2 使用固态硬盘等增加硬盘性能优化文件存储目录的布局以减少 I/O 竞争如果有多个硬盘尽量让日志文件分布在多个硬盘上
3 采用 LogDir 多个目录分散写入负载。