KafkaProducer发送⼤消息该如何配置以及如何提⾼吞吐量kafka版本 2.2.1
今天有个同事要往kafka发送⼀个单条4M⼤⼩的数据,但是报错了,说消息过⼤,那么看⼀下有哪些参数是控制单条消息⼤⼩的
⾸先看Broker级别的配置
message.max.bytes
官⽅⽂档翻译:Kafka允许的最⼤记录批⼤⼩(如果启⽤压缩,则在压缩之后)。如果增加这个值,并且有超过0.10.2的使⽤者,那么使⽤者的获取⼤⼩也必须增加,以便他们能够获取这么⼤的记录批。在最新的消息格式版本中,为了提⾼效率,记录总是分组成批。在以前的消息格式版本中,未压缩的记录不会分组成批,在这种情况下,此限制仅适⽤于单个记录。这可以为每个Topic设置,Topic级别为
说明:这⾥提到Broker级别可以设置message.max.bytes 来限制集的所有topic存储的单条消息⼤⼩,也可以通过
我们⼜看了⼀下⽣产者的配置
<
官⽅⽂档翻译:⽣产者可⽤于缓冲等待发送到服务器的记录的内存总字节。如果记录发送的速度⽐发送到服务器的速度快,那么⽣成器将阻塞max.block.ms之后,它将抛出⼀个异常。这个设置应该⼤致⽣产者将使⽤的总内存,但不是硬性限制,因为⽣产者使⽤的所有内存都⽤于缓冲。⼀些额外的内存将⽤于压缩(如果启⽤了压缩)以及维护动态请求。
说明:将此参数调⼤,2M的数据并没有发送成功
官⽅⽂档翻译:请求的最⼤⼤⼩,以字节为单位。此设置将限制⽣产者在单个请求中发送的消息批的数量,以避免发送⼤量请求。这也有效地限制了未压缩的最⼤记录批⼤⼩。注意,服务器对记录批处理⼤⼩有⾃⼰的上限(如果启⽤了压缩,则在压缩之后),上限可能与此不同。
说明:将此参数调⼤,2M的数据发送成功
后续:虽然添加了quest.size参数后能发送成功,但是发现发送速度有点慢,也就是体现出吞吐量低,延迟⾼
再看⼀下⽣产者的其他参数
batch.size
官⽅⽂档翻译:
每当多个记录被发送到同⼀个分区时,⽣产者将尝试将记录批处理成更少的请求。这有助于提⾼客户机和服务器的性能。此配置以字节为单位控制默认批处理⼤⼩。不会尝试对⼤于此⼤⼩的记录进⾏批处理。发送到代理的请求将包含多个批处理,每个分区都有⼀个批处理,其中有可供发送的数据。较⼩的批处理⼤⼩将使批处理不那么常见,并可能降低吞吐量(批处理⼤⼩为零将完全禁⽤批处理)。⾮常⼤的批处理可能会更加浪费内存,因为我们总是会分配指定批处理⼤⼩的缓冲区,以预期会有更多的记录。
官⽅⽂档翻译:⽣产者⽣成所有数据的压缩类型。默认值是none(即没有压缩)。有效值是none、gzip、snappy、lz4或zstd。压缩是整批的数据,因此批处理的效率也会影响压缩⽐(批处理越多,压缩效果越好)。压缩的速度上lz4=snappy<gzip。
linger.ms
官⽅⽂档翻译:当数据到达速度⽐发送速度快的时候,⽣产者在请求传输之间到达的任何数据分组为单个批处理请求,这样就会产⽣更多的请求,为了减少请求,即使在中等负载的情况下,也希望减少请求数量,那么通过设置⼀些延迟来实现,也就是⽣产者不会⽴即发送⼀个记录,⽽是等待指定延迟后再发送,这样就可以成批的发送数据了,batch.size和linger.ms哪个先满⾜条件,都会发送这⼀批记录
我们把linger.ms设置为5,将pe设置为gizp,发送速度明显加快
还有其他的增加吞吐量,降低延迟的⽅式吗?评论区告诉我(跟抖⾳主播学的.....)
>kafka为什么那么快
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论