버전 Spring Boot 1.5.x, Spring Boot 2.4.x, Apache Kafka 0.10.2
그 상황
서로 다른 서버에서 호스팅되는 두 개의 서비스 인스턴스가 있습니다. 각 인스턴스는 여러 Kafka 소비자를 초기화합니다. 모든 소비자는 동일한 주제를 듣고 있으며 동일한 소비자 그룹의 일부입니다. 우리는 하지 ConcurrentKafkaListnerContainerFactory과 DefaultKafkaConsumerFactory를 구성하는 Spring 부팅 / Spring 카프카에 의존. max.poll.records, session.timeout.ms 및 heartbeat.interval.ms를 제외한 모든 소비자 구성 속성은 기본 Apache Kafka 소비자 속성 값으로 설정됩니다. 확인 모드가 녹화로 설정됩니다.
@KafkaListener 어노테이션을 사용하고 초기화 된 ConcurrentKafkaListenerContainerFactory의 빈 이름으로 containerFactory 속성을 설정하고 항목 속성을 설정합니다.
문제
주제가 하루나 이틀 동안 게시 된 메시지를받지 못하면 모든 소비자가 소비자 그룹에서 제거됩니다. 이런 일이 발생하는 이유를 찾을 수 없습니다. 폴링이 max.poll.interval.ms 내에서 호출되면 Apache Kafka와 Spring Kafka 문서를 모두 읽는 것에 대한 나의 이해에서 소비자는 살아있는 것으로 간주됩니다. 그리고 session.timeout.ms 내에서 소비자가 하트 비트를 지속적으로 보내면 소비자는 살아있는 것으로 간주됩니다. 설명서에 따르면 poll은 지속적으로 호출되며 heartbeat.interval.ms에서 설정 한 간격으로 하트 비트가 전송됩니다.
질문
- Spring Boot / Spring Kafka가 하루나 이틀 동안 유휴 주제의 레코드를 소비하지 않은 소비자를 소비자 그룹에서 제거하도록하는 설정 또는 속성이 있습니까?
- 그렇다면이 기능을 끌 수 있으며 단점은 무엇입니까?
- 그렇지 않은 경우 서비스를 다시 시작하지 않고 소비자 그룹에 다시 참여할 수있는 방법이 있습니까? 단점은 무엇입니까?