![](/img/trans.png)
[英]Getting intermittent KafkaProducerException: Failed to send org.apache.kafka.common.errors.TimeoutException
[英]Azure eventhub Kafka org.apache.kafka.common.errors.TimeoutException for some of the records
有一個包含 80 到 100 條記錄的 ArrayList 嘗試 stream 並將每個單獨的記錄(POJO,不是整個列表)發送到 Kafka 主題(事件中心)。 安排一個像每小時一樣的 cron 作業將這些記錄(POJO)發送到事件中心。
能夠看到正在發送到 eventthub 的消息,但是在成功運行 3 到 4 次后出現以下異常(其中包括正在發送的幾條消息和幾條失敗並出現以下異常)
Expiring 14 record(s) for eventhubname: 30125 ms has passed since batch creation plus linger time
以下是使用的 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");
Message Retention period - 7 Partition - 6 使用 spring Kafka(2.2.3) 發送標記為@Async
的事件方法,其中寫有kafka send
@Async
protected void send() {
kafkatemplate.send(record);
}
預期 - 不會從 kafka 拋出異常實際 - org.apache.kafka.common.errors.TimeoutException 被拋出
Prakash - 我們已經看到了一些問題,其中尖峰的生產者模式看到批處理超時。
這里的問題是生產者有兩個 TCP 連接可以 go 空閑超過 4 分鍾 - 那時,Azure 負載平衡器關閉空閑連接。 Kafka 客戶端不知道連接已關閉,因此它嘗試在死連接上發送批處理,該連接超時,此時重試開始。
請隨時與 Github 上的 EH 產品團隊聯系,我們非常擅長回應問題 - https://github.com/Azure/azure-event-hubs-for-kafka
此異常表明您正在以比發送記錄更快的速度排隊記錄。 將記錄添加到批次后,發送該批次有一個時間限制,以確保它已在指定的持續時間內發送。 這由 Producer 配置參數 request.timeout.ms 控制。 如果批處理的排隊時間超過了超時限制,則會拋出異常。 該批次中的記錄將從發送隊列中刪除。
請檢查以下類似問題,這可能會有所幫助。
Kafka 生產者 TimeoutException: Expiring 1 record(s)
你也可以檢查這個鏈接
還要實施適當的重試策略。
請注意,這不考慮掃描儀端的任何網絡問題。 由於網絡問題,您將無法發送到任一集線器。
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.