java - Spring-Cloud-Stream Kafka Azure - 获取数据时出现意外错误代码 13
问题描述
我正在开发一个 dockerized 的 SpringBoot 应用程序。docker 映像是微服务,其中之一与 Azure 事件中心通信。
我的一些属性:
弹簧启动-> 2.0.7.RELEASE
spring-cloud.version -> Finchley.SR2
我在 Azure 中创建了一个主题(启用了 Kafka)。
我按照一些简单的指南来设置我的微服务,一切正常。
@EnableBinding({Processor.class})
public class EventService {
...
@Autowired private Processor ehProcessor;
...
public void send(String event) {
Message<String> message = MessageBuilder
.withPayload(event)
.setHeader(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.APPLICATION_JSON)
.build();
boolean send = ehProcessor.output().send(message, 5000L);
if (!send) {
log.error("Event NOT sent", event);
}
}
...
@StreamListener(target = Processor.INPUT)
public void receive(String event) {
handle(event);
}
}
整整一个月一切都很好,但在最后两天,微服务卡住了,因为连续的堆栈跟踪正在填满我的所有磁盘(解决方案是设置 docker 日志轮换)。
java.lang.IllegalStateException: Unexpected error code 13 while fetching data
at org.apache.kafka.clients.consumer.internals.Fetcher.parseCompletedFetch(Fetcher.java:891) ~[kafka-clients-1.0.1.jar!/:na]
at org.apache.kafka.clients.consumer.internals.Fetcher.fetchedRecords(Fetcher.java:528) ~[kafka-clients-1.0.1.jar!/:na]
at org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1154) ~[kafka-clients-1.0.1.jar!/:na]
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1111) ~[kafka-clients-1.0.1.jar!/:na]
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run(KafkaMessageListenerContainer.java:699) ~[spring-kafka-2.1.7.RELEASE.jar!/:2.1.7.RELEASE]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_181]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_181]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181]
我说的是 1 毫秒内的 8/9 日志消息。
查看org.apache.kafka.common.protocol.Errors类内部的错误与:
NETWORK_EXCEPTION(13, "服务器在收到响应前已断开连接。"
我无法以编程方式重现此错误。我不明白为什么当出现第一个错误时,日志会开始并且不会在无限循环中停止。我需要停止 docker 容器,有时容器不会停止。唯一的解决方案是删除容器并重新创建。
更新
我在 github 上打开了一个问题here。我已经收到回复,他们正在开始调查。
更新
问题已解决。
当他们将 UnknownServerException 更改为 NetworkException 时,Spring Boot 开始陷入重试循环。
解决方案
它已在此链接中确认,
最近发生了一个变化,将 UnknownServerException 的实例更改为 NetworkException。
问题详细信息在这里 - https://github.com/Azure/azure-event-hubs-for-kafka/issues - 带有您的命名空间信息。谢谢!
推荐阅读
- php - 如何在 laravel 中保护 .evn 文件
- javascript - 使用 useRef 时需要打字稿的模式
- reactjs - react-native-router-flux,如何检测路由器更改?
- vue.js - bootstrap vue toast 立即消失
- python - 在 python 中导入调试构建的 tensorflow 会导致导入错误
- javascript - 在 react 中使用 Axios 在一个 componentDidMount 中调用多个 API
- c++ - C++ 中的协议缓冲区 SerializeToString/SerializeAsString 内存管理
- algorithm - 具有权益证明共识的区块链是否有特殊节点来选择获胜者?
- html - 如何使侧边栏菜单元素居中
- javascript - 使用递归查找数组中对象值的总和