今天kafka生产环境突然报错TimeoutException: Expiring 1 record(s) for TOPICNAME-1:963170 ms has passed since batch creation

Home . 发表于: 2020-11-18   最后更新时间: 2021-11-15 10:04:45   9,694 游览

之前一直正常运行,突然报的这个错,过了一会又恢复正常了,这条消息从开始发送到报发送失败用了13分钟,想问一下什么原因导致的报错?还有这个963170ms是在哪设置的,能不能定义的短一些,比如一分钟

kafka版本:kafka_2.12-2.3.0
zookeerper版本:zookeeper-3.4.10
有三个kafka节点

代码是用的springboot的异步发送

//这里是9点3分开始发送
kafkaProducer.sendMsg(topicData).addCallback(new ListenableFutureCallback<SendResult<String, Object>>() {
    @Override
    public void onFailure(Throwable ex) {
        //9.19才报这个错
        log.info("消息发送失败!!!}");
    }

    @Override
    public void onSuccess(SendResult<String, Object> result) {
        log.info("消息发送成功");
    }
});

kafka配置如下:

broker.id=0

auto.create.topics.enable=false
delete.topic.enable=true
listeners=SASL_PLAINTEXT://ip:9092
advertised.listeners=SASL_PLAINTEXT://ip:9092
request.timeout.ms=50000

authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
allow.everyone.if.no.acl.found=true

default.replication.factor=2
num.network.threads=8
num.io.threads=8
socket.send.buffer.bytes=1048576
socket.receive.buffer.bytes=1048576
socket.request.max.bytes=104857600
log.dirs=/data/kafka_2.12-2.3.0/mykafkalogs

num.partitions=3
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=2
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=ip:2181,ip2:2181,ip3:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0

代码Kafka配置项:

spring:
  kafka:
    bootstrap-servers: ip:9092,ip2:9092,ip3:9092

    producer:
      acks: -1
      retries: 1
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
      properties:
        max.block.ms: 40000
        linger.ms: 1000
      batch-size: 162840
      buffer-memory: 33554432

    consumer:
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      auto-offset-reset: earliest
    listener:
      missing-topics-fatal: false
    security:
      protocol: SASL_PLAINTEXT
    properties:
      sasl.mechanism: PLAIN
发表于 2020-11-18

1、request.timeout.ms
2、一般这种是网络阻断或抖动引起的(ps:但是生产抖动没有那么长时间的,而且我看你配置重试了一次,并且你配置的ack=-1,需要所有副本应答,如果你副本太多,集群压力网络和io压力巨大)。

Home . -> 半兽人 4年前

这个request.timeout.ms单位是毫秒吗?我一共3个节点,所以设置的-1

半兽人 -> Home . 4年前

ms毫秒,你想,你每发送1条消息,3个broker都要应答成功,你的生产者才认为成功。

Home . -> 半兽人 4年前

没想明白.......我设置的50000,就是50秒,三个broker是150秒,咋隔了十多分钟呢😂

半兽人 -> Home . 4年前

生产者retries设置为0
request.timeout.ms 也是在生产者上配置的,服务器的配置是连接保持,不同的。

参考:https://www.orchome.com/511
搜索关键字"ms"

Home . -> 半兽人 4年前

好的 我先看看

Home . -> 半兽人 4年前

还有个问题问一下,leader节点与follower同步是不是有个周期,并不是立即同步的?比如2分钟同步一次,或者消息大小达到多少时同步一次?

半兽人 -> Home . 4年前

立即同步的。

你的答案

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