Я занимаюсь разработкой приложения SpringBoot.Образы докера представляют собой микросервисы, и один из них связывается с концентратором событий Azure.
Некоторые из моих свойств:
spring-boot -> 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);
}
}
Целый месяц все идет хорошо, но в последние два дня микросервис зависает.потому что непрерывная трассировка стека заполняет весь мой диск (решение было установить ротацию журнала докера).
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]
Я говорю о 8/9 сообщениях журнала за 1 мс.
Заглянув внутрь класса org.apache.kafka.common.protocol.Errors , ошибка связана с:
NETWORK_EXCEPTION (13, "Сервер отключился до получения ответа. "
Я не могу программно воспроизвести эту ошибку. Я не понимаюи почему при появлении первой ошибки журнал запускается и не останавливается в бесконечном цикле.Мне нужно остановить докер контейнер, и иногда контейнер не останавливается.Единственное решение - удалить контейнер и заново создать его.
ОБНОВЛЕНИЕ
Я открыл проблему на github здесь .Я уже получил ответ, и они начинают расследовать его.
ОБНОВЛЕНИЕ
Проблема была исправлена.
Когда они изменили UnknownServerException на NetworkException, Spring Boot начал застрять в цикле повторов.