Flink发送Kafka报错

背景

  • 测试服FLink发送消息至kafka的topicA
  • 相比线上服来说,测试服这次是全量跑数,发的数据远大于线上服正在往topicA发的量,数量非常巨大

报错

[04:01:17:52:32:627] ERROR [kafka-producer-network-thread | producer-1] [] [] [] @@LoggingProducerListener@@ | Exception thrown when sending a message with key='null' and payload='nnn' to topic topicA:
org.apache.kafka.common.errors.TimeoutException: Expiring 74 record(s) for topicA-1: 33303 ms has passed since last append

在Flink任务启动不久后出现大批量的如上报错

分析

Flink发送Kafka报错
源码逻辑如上,分析应该跟kafka broker端无关,是producer当中的batch批次满了后,未从分区对应的内存队列中(生产者源码)发送出,反而expired,就会报这个错

解决措施

从ELK查看了下send message的beat数目,得到每秒钟、每分钟大概发送多少条数据,从而计算了下每秒钟发送消息的大小,然后修改对应的batch size以及buffer memory,再将linger.ms从0ms改大至1000ms(因为我们这个场景是测试服跑数据,对消息的延迟性并不做过多要求)

上一篇:Kafka Producer 核心知识


下一篇:源码分析-Producer