Amazon MSK 소비자 그룹이 계속 재조정되는 문제를 해결하려면 어떻게 해야 하나요?

3분 분량
0

Amazon Managed Streaming for Apache Kafka(Amazon MSK) 소비자 그룹이 계속 재조정됩니다. 이 문제의 원인을 해결하고 싶습니다.

해결 방법

Apache Kafka 소비자는 일반적으로 소비자 그룹에 속합니다. 소비자 그룹 내 각 소비자는 다음과 같은 경우 주제에 있는 파티션의 여러 하위 집합으로부터 메시지를 받습니다.

  • 여러 소비자가 한 주제를 구독합니다.
  • 소비자가 동일한 소비자 그룹에 속합니다.

소비자가 클러스터에 도달할 수 없는 경우 그룹 코디네이터가 소비자를 소비자 그룹에서 제거합니다. 이 프로세스에서 다음의 작업을 포함하는 재조정 이벤트를 시작합니다.

  • 나머지 소비자가 파티션에서 벗어납니다.
  • 그룹 코디네이터가 주제의 파티션을 나머지 소비자에게 재분배합니다.

다음과 같은 조건에서 소비자 그룹이 재조정됩니다.

  • 소비자 그룹의 한 소비자에서 다른 소비자로 파티션 소유권을 옮겼습니다.
  • 소비자 그룹에 새 소비자를 추가했습니다.
  • 소비자가 종료되거나, 충돌하거나, 소비자 그룹을 탈퇴했습니다.
  • 주제를 수정해서 파티션이 재정렬되었습니다.
  • 소비자 그룹 구독에 클라이언트 구성 문제가 있습니다. 이는 그룹에서 구독한 주제와 그룹 내 각 소비자에게 할당된 주제가 불일치해서 발생합니다.

동일한 소비자 그룹 내의 소비자는 재조정 이벤트가 완료될 때까지 데이터 소비를 할 수 없습니다. 이는 파티션 할당의 기본 동작입니다. 파티션 할당 전략을 CooperativeStickyAssignor로 변경하면 이 문제를 방지할 수 있습니다.

소비자 그룹이 계속 재조정되는 것을 막으려면 다음을 따르세요.

  • 소비자 구성에서 max.partition.fetch.bytes 값을 낮추거나 세션 제한 시간(session.timeout.ms) 값을 늘리세요. 소비자는 세션 제한 시간 초과 및 그에 따른 재조정을 피하기 위해 **poll()**을 자주 호출하게 됩니다. 단일 **poll()**이 반환하는 데이터의 양이 많으면 소비자가 데이터를 처리하는 데 시간이 오래 걸릴 수 있습니다. 이는 소비자가 세션 제한 시간 초과를 피하기 위해 제 시간에 다음 폴링 루프를 시작하지 않음을 뜻합니다.
    참고: session.timeout.ms에 높은 값을 설정하면 실수로 재조정될 가능성이 낮아집니다. 그러나 실제 장애를 감지하는 데 시간이 더 걸릴 수 있습니다. 이 매개 변수는 heartbeat.interval.ms와 연관됩니다. heartbeat.interval.ms 매개 변수는 KafkaConsumer poll() 메서드가 그룹 코디네이터에게 하트비트를 보내는 빈도를 제어합니다. 그러나 session.timeout.ms 매개 변수는 소비자가 하트비트를 전송하지 않고 버틸 수 있는 시간을 제어합니다.
    예를 들어, Apache Kafka 버전 0.10.1 이상을 실행해 처리 시간이 오래 걸리는 레코드를 처리한다고 가정합시다. 이 경우, max.poll.interval.ms를 조정하여 새 레코드에 대한 폴링 사이의 더 긴 지연을 처리하세요.
  • 소비자 구성의 session.timeout.ms 값이 브로커 구성의 group.max.session.timeout.ms 값보다 낮아야 합니다.
  • max.poll.interval.ms는 소비자가 레코드를 더 많이 가져오기 전에 유휴 상태를 유지할 수 있는 시간의 상한선을 설정합니다. 기본적으로 이 값은 5분으로 설정됩니다. 이 값이 5분 미만으로 설정되어 있는 경우, 값을 늘려 재조정 가능성을 줄이세요. max.poll.recordsmax.poll.interval.ms를 줄이는 것도 고려해 볼 수 있습니다.
  • heartbeat.interval.ms는 Kafka의 그룹 관리 기능을 사용할 때 소비자 코디네이터와 하트비트 사이의 예상 시간입니다. 하트비트는 소비자 세션이 활성 상태를 유지하는 데 사용됩니다. 이는 새 소비자가 그룹에 가입하거나 탈퇴할 때 재조정을 용이하게 합니다. 이 값은 session.timeout.ms보다 낮은 값으로 설정해야 합니다. 일반적으로 이 값은 session.timeout.ms의 1/3보다 크지 않은 값으로 설정해야 합니다. heartbeat.interval.ms 값을 훨씬 낮게 조정하여 일반 재조정에 걸리는 예상 시간을 제어할 수 있습니다.
  • 소비자 그룹의 구독 주제 중 하나에서 파티션을 변경하는 파티션 재할당을 최근에 수행했다면 소비자 그룹이 재조정될 수 있습니다. 이는 관련된 파티션이 이동 또는 변경되었기 때문입니다. 이 경우 그룹 코디네이터나 다른 Kafka 브로커를 다시 시작하지 마세요. 소비자 그룹 재조정을 중지하기 전에 파티션 재할당이 완료될 때까지 기다려야 합니다. 트래픽이 적을 때 파티션을 재할당하는 것이 가장 좋습니다.

경우에 따라 Amazon MSK 브로커 로그에 다음 정보가 표시될 수 있습니다.

[2023-03-01 01:23:45,678] INFO [GroupCoordinator 1]: Preparing to rebalance group amazon.msk.canary.group.broker-1 in state PreparingRebalance with old generation 382660 (__consumer_offsets-21) (reason: Adding new member consumer-amazon.msk.canary.group.broker-1-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx with group instance id None) (kafka.coordinator.group .GroupCoordinator)

이 메시지는 amazon.msk.canary.group.broker-N이 PreparingRebalance 상태임을 나타냅니다.

amazon.msk.canary.group.broker-N 그룹은 클러스터 상태와 진단 지표를 확인하기 위해 정기적으로 추가 또는 제거되는 내부 소비자 그룹입니다. 이러한 그룹은 크기가 작고 삭제가 불가능합니다. 이 메시지는 무시해도 됩니다.

관련 정보

소비자 그룹이 PreparingRebalance 상태에 멈춤

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음

관련 콘텐츠