Kafka缓冲池设计原理是什么?初看令人困惑,深入理解后令人叹服。
- 内容介绍
- 文章标签
- 相关推荐
本文共计1763个文字,预计阅读时间需要8分钟。
这篇文章,同样给家里聊聊一个硬核的技术知识。我们通过Kafka内核源码中的一些设计思路,来看看你如何设计Kafka架构的技术大牛,是如何优化JVM的GC问题的。
1. Kafka的客户端缓冲机制 首先,Kafka的客户端缓冲机制是如何工作的呢?
2. 优化JVM的GC问题 接着,我们来看看技术大牛是如何优化JVM的GC问题的。
这篇文章,同样给大家聊一个硬核的技术知识,我们通过Kafka内核源码中的一些设计思想,来看你设计Kafka架构的技术大牛,是怎么优化JVM的GC问题的?
1、Kafka的客户端缓冲机制
首先,先得给大家明确一个事情,那就是在客户端发送消息给kafka服务器的时候,一定是有一个内存缓冲机制的。
也就是说,消息会先写入一个内存缓冲中,然后直到多条消息组成了一个Batch,才会一次网络通信把Batch发送过去。
整个过程如下图所示:
2、内存缓冲造成的频繁GC问题
那么这种内存缓冲机制的本意,其实就是把多条消息组成一个Batch,一次网络请求就是一个Batch或者多个Batch。
这样每次网络请求都可以发送很多数据过去,避免了一条消息一次网络请求。从而提升了吞吐量,即单位时间内发送的数据量。
但是问题来了,大家可以思考一下,一个Batch中的数据,会取出来然后封装在底层的网络包里,通过网络发送出去到达Kafka服务器。
那么然后呢?这个Batch里的数据都发送过去了,现在Batch里的数据应该怎么处理?
你要知道,这些Batch里的数据此时可还在客户端的JVM的内存里啊!那么此时从代码实现层面,一定会尝试避免任何变量去引用这些Batch对应的数据,然后尝试触发JVM自动回收掉这些内存垃圾。
本文共计1763个文字,预计阅读时间需要8分钟。
这篇文章,同样给家里聊聊一个硬核的技术知识。我们通过Kafka内核源码中的一些设计思路,来看看你如何设计Kafka架构的技术大牛,是如何优化JVM的GC问题的。
1. Kafka的客户端缓冲机制 首先,Kafka的客户端缓冲机制是如何工作的呢?
2. 优化JVM的GC问题 接着,我们来看看技术大牛是如何优化JVM的GC问题的。
这篇文章,同样给大家聊一个硬核的技术知识,我们通过Kafka内核源码中的一些设计思想,来看你设计Kafka架构的技术大牛,是怎么优化JVM的GC问题的?
1、Kafka的客户端缓冲机制
首先,先得给大家明确一个事情,那就是在客户端发送消息给kafka服务器的时候,一定是有一个内存缓冲机制的。
也就是说,消息会先写入一个内存缓冲中,然后直到多条消息组成了一个Batch,才会一次网络通信把Batch发送过去。
整个过程如下图所示:
2、内存缓冲造成的频繁GC问题
那么这种内存缓冲机制的本意,其实就是把多条消息组成一个Batch,一次网络请求就是一个Batch或者多个Batch。
这样每次网络请求都可以发送很多数据过去,避免了一条消息一次网络请求。从而提升了吞吐量,即单位时间内发送的数据量。
但是问题来了,大家可以思考一下,一个Batch中的数据,会取出来然后封装在底层的网络包里,通过网络发送出去到达Kafka服务器。
那么然后呢?这个Batch里的数据都发送过去了,现在Batch里的数据应该怎么处理?
你要知道,这些Batch里的数据此时可还在客户端的JVM的内存里啊!那么此时从代码实现层面,一定会尝试避免任何变量去引用这些Batch对应的数据,然后尝试触发JVM自动回收掉这些内存垃圾。

