kafka超时报错 Expiring 28 record(s) for xxx-11: 30302 ms has passed since batch creation plus linger time

n 发表于: 2020-07-16   最后更新时间: 2020-07-16 10:51:52   7,819 游览

线上偶尔出现超时报错

nested exception is org.apache.kafka.common.errors.TimeoutException: Expiring 28 record(s) for xxx-11: 30302 ms has passed since batch creation plus linger time

retries: 1
# 每次批量发送消息的数量
batch-size: 162840
linger: 300
acks: 1
request.timeout.ms: 50000
# 缓存容量
buffer-memory: 33554432
# 指定消息key和消息体的编解码方式
发表于 2020-07-16
n
添加评论

超时警告,不是错误,如果偶尔出现,不是因为网络抖动的原因话,那说明生产者客户端的发送能力低于消息产生的能力,要么是服务器的接收能力不足,导致客户端发送阻塞,需要关注一下服务器接收消息带宽总数。

客户端可以调整请求批次的消息大小,来提高吞吐量

batch.size=162840

可参考:https://www.orchome.com/472

服务器每个时间窗口最大接收消息的带宽总量

socket.request.max.bytes=默认100m

可参考:https://www.orchome.com/472

n -> 半兽人 4年前

[ERROR] [kafka-producer-network-thread | producer-1] - kafka sendMessage error, ex = Failed to send; nested exception is org.apache.kafka.common.errors.TimeoutException: Expiring 10 record(s) for xxx-4: 30185 ms has passed since batch creation plus linger time, topic = xxx,

完整的报错是这样的

n -> 半兽人 4年前

可以建议一下 , max.request.size 调整多大合适呢?

半兽人 -> n 4年前

我不清楚你集群的规模,当下的压力指标等信息额,无法给合适的建议。
linger.ms你设置的300,太大了,可以考虑50。
batch-size可以稍微加大一点,比如20%。

n -> 半兽人 4年前

现在发现,项目启动的时候打印producer的信息,linger.ms 和request.timeout.ms没有生效,配置是在yml里的

n -> 半兽人 4年前

配置 linger.ms为50后 出现 了TimeoutException: Expiring 23 record(s) for data-export-store-4: 50025 ms has passed since last append

半兽人 -> n 4年前

频率是否降低?

n -> 半兽人 4年前

还是未有改善,目前来看,因为业务,kafka瞬间暴增60000条数据,才会导致这个错误

半兽人 -> n 4年前

1、可以考虑增加分区数来分摊压力
2、batch.size 继续加大
3、重试次数多加2次。

n -> 半兽人 4年前

目前分区是12个,6台机器

hatch.size=244260
linger.ms: 100
request.timeout.ms: 60000
max.request.size: 2097152

重试一次,还是会出现错误

¿¿¿¿¿¿ -> n 4年前

兄弟,你解决了吗

# -> ¿¿¿¿¿¿ 4年前

没有 加了机器后出现频率低了

你的答案

查看kafka相关的其他问题或提一个您自己的问题