使用Apache Kafka Java客户端(0.9),我正在尝试使用Kafka Producer类向代理发送一长串记录.
异步发送方法立即返回一段时间,然后在短时间内开始阻塞每次调用.大约三十秒后,客户端开始抛出异常(TimeoutException),并显示消息"Batch expired".
什么情况导致抛出此异常?
有一个包含 80 到 100 条记录的 ArrayList 尝试将每个单独的记录(POJO,而不是整个列表)流式传输并发送到 Kafka 主题(事件中心)。每小时安排一次 cron 作业,将这些记录 (POJO) 发送到事件中心。
能够看到发送到 eventhub 的消息,但在 3 到 4 次成功运行后出现以下异常(其中包括正在发送的几条消息和几条因以下异常而失败的消息)
Expiring 14 record(s) for eventhubname: 30125 ms has passed since batch creation plus linger time
Run Code Online (Sandbox Code Playgroud)
以下是使用的 Producer 的配置,
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.ACKS_CONFIG, "1");
props.put(ProducerConfig.RETRIES_CONFIG, "3");
Run Code Online (Sandbox Code Playgroud)
Message Retention period - 7 Partition - 6 使用spring Kafka(2.2.3)发送标记为@Async写kafka发送的事件的方法
@Async
protected void send() {
kafkatemplate.send(record);
}
Run Code Online (Sandbox Code Playgroud)
预期 - kafka 不会抛出异常 实际 - org.apache.kafka.common.errors.TimeoutException 被抛出