Kafka Producer 发送大消息该如何配置以及如何提高吞吐量

kafka版本 2.2.1

今天有个同事要往kafka发送一个单条4M大小的数据,但是报错了,说消息过大,那么看一下有哪些参数是控制单条消息大小的

首先看Broker级别的配置

message.max.bytes

官方文档翻译:Kafka允许的最大记录批大小(如果启用压缩,则在压缩之后)。如果增加这个值,并且有超过0.10.2的使用者,那么使用者的获取大小也必须增加,以便他们能够获取这么大的记录批。在最新的消息格式版本中,为了提高效率,记录总是分组成批。在以前的消息格式版本中,未压缩的记录不会分组成批,在这种情况下,此限制仅适用于单个记录。这可以为每个Topic设置,Topic级别为max.message.bytes的配置。

说明:这里提到Broker级别可以设置message.max.bytes 来限制集群的所有topic存储的单条消息大小,也可以通过max.message.bytes给单个topic设置,查看集群的配置发现,message.max.bytes为10M,应该是够了,应该不是Broker配置的问题

 

我们又看了一下生产者的配置

buffer.memory

官方文档翻译:生产者可用于缓冲等待发送到服务器的记录的内存总字节。如果记录发送的速度比发送到服务器的速度快,那么生成器将阻塞max.block.ms之后,它将抛出一个异常。这个设置应该大致生产者将使用的总内存,但不是硬性限制,因为生产者使用的所有内存都用于缓冲。一些额外的内存将用于压缩(如果启用了压缩)以及维护动态请求。

说明:将此参数调大,2M的数据并没有发送成功

 

max.request.size

官方文档翻译:请求的最大大小,以字节为单位。此设置将限制生产者在单个请求中发送的消息批的数量,以避免发送大量请求。这也有效地限制了未压缩的最大记录批大小。注意,服务器对记录批处理大小有自己的上限(如果启用了压缩,则在压缩之后),上限可能与此不同。

说明:将此参数调大,2M的数据发送成功

 

后续:虽然添加了max.request.size参数后能发送成功,但是发现发送速度有点慢,也就是体现出吞吐量低,延迟高

再看一下生产者的其他参数

batch.size

 官方文档翻译:

每当多个记录被发送到同一个分区时,生产者将尝试将记录批处理成更少的请求。这有助于提高客户机和服务器的性能。此配置以字节为单位控制默认批处理大小。不会尝试对大于此大小的记录进行批处理。发送到代理的请求将包含多个批处理,每个分区都有一个批处理,其中有可供发送的数据。较小的批处理大小将使批处理不那么常见,并可能降低吞吐量(批处理大小为零将完全禁用批处理)。非常大的批处理可能会更加浪费内存,因为我们总是会分配指定批处理大小的缓冲区,以预期会有更多的记录。

compression.type

  官方文档翻译:生产者生成所有数据的压缩类型。默认值是none(即没有压缩)。有效值是none、gzip、snappy、lz4或zstd。压缩是整批的数据,因此批处理的效率也会影响压缩比(批处理越多,压缩效果越好)。压缩的速度上lz4=snappy

linger.ms

 官方文档翻译:当数据到达速度比发送速度快的时候,生产者在请求传输之间到达的任何数据分组为单个批处理请求,这样就会产生更多的请求,为了减少请求,即使在中等负载的情况下,也希望减少请求数量,那么通过设置一些延迟来实现,也就是生产者不会立即发送一个记录,而是等待指定延迟后再发送,这样就可以成批的发送数据了,batch.size和linger.ms哪个先满足条件,都会发送这一批记录

 

我们把linger.ms设置为5,将compression.type设置为gizp,发送速度明显加快

还有其他的增加吞吐量,降低延迟的方式吗?评论区告诉我(跟抖音主播学的.....)

 

你可能感兴趣的:(大数据,kafka,大数据)