봄 통합 카프카 3.0.1 -> 3.1.2 시험은 이제 시작에 경우없는 브로커 가능 시작할 수 없습니다

mrusinak :

2.1 Springboot 2.0에서 프로젝트를 업그레이드 할 때, 우리는 또한 업그레이드 된 spring-kafka-integration3.0.1에서 3.2.1. 이 과정에서 우리의 테스트는 이제 모든에 의한 시작할 수 없습니다 :

org.apache.kafka.clients.NetworkClient   : [Consumer clientId=consumer-1, groupId=x] Connection to node -1 could not be established. Broker may not be available.
org.apache.kafka.clients.NetworkClient   : [Consumer clientId=consumer-1, groupId=x] Connection to node -1 could not be established. Broker may not be available.
org.apache.kafka.clients.NetworkClient   : [Consumer clientId=consumer-1, groupId=x] Connection to node -1 could not be established. Broker may not be available.
...
org.springframework.context.ApplicationContextException: Failed to start bean 'eventInboundFlow.kafka:message-driven-channel-adapter#0'; nested exception is org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic metadata

우리의 빌드 시스템은 카프카가 로컬로 실행하지 않아도, 그리고이 활용 시험 EmbeddedKafkaBroker실수로 휴식에 메시지를 누출 시험을 방지하기 위해 최근에 모든 파티션 및 주제를 찾는 동안 중지 사용자 정의 JUnit5 확장자 그렇게는 / (시험 사이의 컨테이너 리스너를 시작합니다 나중에 시험에서 기대). 지금까지보다 더 빨리하면서 @DirtiesContext등, 그 구성 중 상황에 자신을 주입하지 않는 @EmbddedKafka주석 않습니다.

이전 버전에서는이 문제가 아니었다 우리는 확장 구성하고 브로커를 시작했지만 모든 미세 동안 연결할 수 없다는 대한 몇 가지 로그 메시지를 볼 것입니다.

새 버전에서는 문맥 (사용자 지정 확장도 실행 할 수있는 기회를 얻을 수 없다) 완전히 시작되지 않습니다. , 속성을 살펴보면 유일한 설정 내가 주위를 볼 수 있습니다 시작 실패는 spring.kafka.admin.fail-fast있지만, 기본적으로 FALSE이며, 우리가 그것을 변경하지 마십시오.

springboot 응용 프로그램으로 프로젝트 자체를 시작으로 비교, 내가 보는 첫 번째 차이는 컨테이너 응용 프로그램으로 실행할 때 자신의 스레드에서 시작하지만,에하는 것입니다 main/ Test Worker스레드 테스트로 실행할 때. 이전 버전에서 테스트는 자신의 스레드에서 컨테이너를 시작했다.

테스트가 다르게 지금 행동 왜 어떤 통찰력? 또는 메인 스레드 떨어져 그들을 얻을하도록 구성 할 수있는 방법이 있다면?

게리 러셀 :

컨테이너 속성을 설정 missingQueuesFatal하는 방법에 대해 false.

참고 항목 Apacher 카프카 2.2 봄. 새로운 기능 .

새로운 컨테이너 속성 (missingTopicsFatal)가 추가되었습니다. 자세한 내용은 KafkaMessageListenerContainer 사용을 참조하십시오.

버전 2.2부터 missingTopicsFatal라는 새로운 컨테이너 속성 (: 사실 기본값)이 추가되었습니다. 이것은 구성 항목 중 브로커에없는 경우 시작 컨테이너를 방지 할 수 있습니다. 컨테이너가 주제 패턴 (정규식)을 청취하도록 구성된 경우는 적용되지 않습니다. 많은 메시지를 기록하면서 이전에는 주제에 대한 consumer.poll () 메소드 대기 내에서 루프 컨테이너 스레드를 표시합니다. 이외에도 로그에서 문제가있는 것을 발견되지 않았다. 이전 동작을 복원하려면 false로 속성을 설정할 수 있습니다.

거짓 비활성화에 재산의 체크를 설정.

추천

출처http://43.154.161.224:23101/article/api/json?id=187204&siteId=1