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<gzip。

linger.ms

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

 

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

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

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Kafka Producer配置参数用于设置生产者的各项行为和属性。下面是一些常用的Kafka Producer配置参数及其详细解释: 1. bootstrap.servers:指定Kafka集群的初始连接地址,格式为`host1:port1,host2:port2,...`。 2. acks:指定Producer收到确认消息的模式。可选值有:"all"(所有副本都确认),"0"(不需要确认),"1"(只需 Leader 确认)。默认值为"1"。 3. retries:指定在发生发送错误时重试的次数。 4. batch.size:指定批量发送消息的大小,以字节为单位。当待发送消息大小达到这个阈值时,Producer会进行批量发送。 5. linger.ms:指定Producer等待更多消息加入批处理的时间,以毫秒为单位。即使消息大小未达到`batch.size`,如果等待时间超过了该参数设定的阈值,Producer也会发送当前可用的消息。 6. buffer.memory:指定Producer端内存缓冲区的大小,以字节为单位。该缓冲区用于存储尚未发送到服务器的消息。 7. key.serializer:指定用于序列化消息键的序列化器类。 8. value.serializer:指定用于序列化消息值的序列化器类。 9. compression.type:指定消息压缩类型。可选值有:"none"(不压缩),"gzip","snappy","lz4"。 10. max.in.flight.requests.per.connection:指定在收到服务器的确认之前,Producer可以发送的未确认请求的最大数量。较的值可以提高吞吐量,但可能会增加延迟。 11. max.block.ms:指定在Producer缓冲区已满的情况下,Producer.send()方法的最大阻塞时间。 以上仅是一些常见的配置参数,Kafka Producer还提供了很多其他可用的配置选项。你可以根据自己的需求来选择适合的参数进行配置
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值