View a markdown version of this page

소비자 그룹 오프셋 동기화 - Amazon Managed Streaming for Apache Kafka

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

소비자 그룹 오프셋 동기화

MSK Replicator는 소스 클러스터에서 대상 클러스터로 소비자 그룹 오프셋을 동기화하여 소비자가 레코드를 건너뛰지 않고 클러스터를 전환하고 처리를 재개할 수 있습니다. 이 주제에서는 단방향(레거시) 및 양방향(향상된) 구성 모두에서 오프셋 동기화가 작동하는 방식을 다루고 일반적인 함정을 강조합니다.

오프셋 동기화 작동 방식

MSK Replicator는 데이터 복제의 일환으로 소스 클러스터의 메시지를 사용하여 대상 클러스터에 메시지를 생성합니다. 이로 인해 소스 클러스터와 대상 클러스터에 서로 다른 오프셋의 메시지가 발생할 수 있습니다. 복제기 생성 중에 소비자 그룹 오프셋 동기화를 켠 경우 MSK Replicator는 메타데이터를 복사하는 동안 오프셋을 자동으로 변환하므로 대상 클러스터로 장애 조치한 후 소비자가 중단한 부분 근처에서 처리를 재개할 수 있습니다.

MSK Replicator는 스트림 끝(주제 파티션 끝)에 더 가까운 위치에서 읽는 소스 클러스터의 소비자를 위해 최적화됩니다. 소비자 그룹이 소스 클러스터에서 지연되는 경우 소스에 비해 대상의 해당 소비자 그룹에 대해 지연 시간이 더 높아질 수 있습니다. 즉, 소비자는 장애 조치 후 더 많은 중복 메시지를 재처리합니다. 이 지연을 줄이려면 소스 클러스터의 소비자가 스트림 끝을 따라잡고 소비를 시작해야 합니다. 소비자가 소비를 시작하면 MSK Replicator가 지연을 자동으로 줄입니다.

오프셋 동기화는 3단계 파이프라인입니다.

  1. 오프셋 매핑 - 레코드가 소스에서 대상으로 복제되면 복제기는 소스 오프셋과 해당 대상 오프셋 간의 주기적 매핑을 기록합니다. 소스 오프셋과 대상 오프셋이 서로 다르기 때문에(다른 시작점, 압축 등) 이러한 매핑이 필수적입니다.

  2. 오프셋 변환 - 복제기는 주기적으로 소스 클러스터에서 복제된 각 소비자 그룹에 대해 커밋된 오프셋을 읽습니다. 그런 다음 저장된 오프셋 매핑을 사용하여 해당 소스 오프셋을 동등한 대상 오프셋으로 변환합니다.

  3. 오프셋 커밋 - 변환된 오프셋은 대상 클러스터의 __consumer_offsets 주제에 커밋되므로 소비자가 대상에 연결하고 동일한 그룹에 조인하면 거의 올바른 위치에서 재개됩니다.

주요 동작:

  • 오프셋 변환은 정확한 것이 아니라 근사값입니다. 복제기는 오프셋 매핑을 간격으로 샘플링하므로 변환된 오프셋이 실제 동등한 위치보다 약간 뒤처질 수 있습니다. 이는 설계상, 즉 at-least-once 전송 시 오류가 발생하므로 소비자는 장애 조치 후 소수의 메시지를 다시 읽을 수 있습니다.

  • 오프셋은 대상의 해당 그룹에서 적극적으로 소비하는 소비자가 없는 경우에만 대상의 소비자 그룹에 커밋됩니다. 이렇게 하면 복제기가 대상 클러스터에서 이미 실행 중인 소비자를 방해하지 않습니다.

  • 소비자 그룹은 동기화할 구성된 소비자 그룹 필터(패턴 포함/제외)와 일치해야 합니다.

레거시 오프셋 동기화를 사용한 단방향 복제

표준 단방향 복제기(클러스터 A → 클러스터 B)의 기본 모드입니다.

  • 주제 이름 지정 - 레거시 오프셋 동기화는 접두사와 동일한 주제 이름 복제를 모두 지원합니다.

  • 방향 - 생산자가 소스에서 활성 상태이고 소비자가 대상 클러스터에서 비활성 상태인 경우에만 소비자 그룹 오프셋이 대상 클러스터에 동기화됩니다.

  • 장애 조치 - 소비자는 대상 클러스터를 가리킬 수 있으며 변환된 오프셋 위치에서 재개됩니다.

  • 장애 복구 지원 없음 - 레거시 오프셋 동기화는 대상의 오프셋을 소스로 다시 변환하지 않습니다. 소비자를 대상으로 이동하고 나중에 소비자를 소스로 다시 이동하려는 경우 반환 이동에 대한 자동 오프셋 변환이 없습니다. 장애 복구가 필요한 경우 향상된 오프셋 동기화와 함께 양방향 설정을 사용합니다.

향상된 오프셋 동기화를 사용한 양방향 설정

양방향 설정에는 두 개의 복제기가 반대 방향으로 실행되어야 합니다(복제기 A→B 및 복제기 B→A). 각 복제기는 단방향 데이터 복제 및 오프셋 동기화를 계속 수행합니다. 즉, 소스에서 대상으로 데이터를 복제하고 동일한 방향으로 소비자 그룹 오프셋을 동기화합니다. 향상된 오프셋 동기화를 사용하면 생산자와 소비자가 서로 다른 클러스터에서 활성 상태인 경우에도 각 복제기가 소비자 그룹을 계속 동기화할 수 있습니다.

주요 특징:

  • 주제 이름 지정 - 향상된 동기화를 사용하려면 두 복제기 모두에서 동일한 주제 이름 복제가 필요합니다.

  • 각 단방향 복제기 2개 - 각 복제기는 데이터를 복제하고 오프셋을 한 방향으로 동기화합니다. 양방향 동작은 함께 작동하는 페어에서 비롯됩니다.

  • 두 복제기 모두에서 매핑 읽기 - 오프셋을 변환할 때 복제기는 함께 작동하여 사용 가능한 가장 정확한 변환을 결정합니다.

  • 장애 조치 및 페일백 - 소비자를 클러스터에서 다른 클러스터로 이동하고 거의 올바른 위치에서 재개할 수 있습니다.

양방향 오프셋 동기화를 활성화하는 경우:

  • 롤백 기능을 사용한 마이그레이션 - 한 클러스터에서 다른 클러스터로 마이그레이션하고 문제가 발생할 경우 원래 클러스터로 롤백할 수 있는 기능을 원할 때.

  • 액티브-액티브 아키텍처 - 두 클러스터가 모두 읽기 및 쓰기를 적극적으로 제공하고 있으며 소비자가 클러스터 간에 전환할 수 있어야 하는 경우.

  • 재해 복구 - 소비자가 장애 조치 또는 장애 복구 이벤트 후 클러스터의 올바른 오프셋에서 처리를 재개할 수 있도록 해야 하는 경우.

오프셋 동기화 모니터링

다음 Amazon CloudWatch 지표를 모니터링하여 오프셋 동기화가 올바르게 작동하는지 확인합니다.

  • ConsumerGroupCount - 두 복제기 모두에서 예상 소비자 그룹 수가 동기화되고 있는지 확인합니다.

  • ConsumerGroupOffsetSyncFailure - 두 복제기 모두에서 0이어야 합니다. 이 값이 0보다 크면 소비자 그룹이 활성 상태인지 확인하고, 읽기 및 설명 권한을 확인하고, 주제가 대상 클러스터에 존재하는지 확인합니다.

  • OffsetLag (MSK Cluster)OffsetLag (Non-MSK Cluster) - 두 클러스터의 파티션 수준 소비자 지연을 비교하여 오프셋이 동기화되었는지 확인합니다.

일반적인 함정

  1. 소비자는 장애 조치 후 소량의 메시지를 다시 읽을 수 있습니다.

    오프셋 변환은 근사치입니다. 변환된 오프셋은 의도적으로 보수적입니다. 실제 동등한 위치보다 약간 뒤처질 수 있습니다. 즉, 소비자는 일반적으로 클러스터를 전환한 후 소수의 레코드를 재처리합니다. 애플리케이션은 중복 처리(멱등성)를 처리하도록 설계되어야 합니다.

  2. 오프셋은 대상에서 적극적으로 소비하는 그룹과 동기화되지 않습니다.

    소비자 그룹이 대상 클러스터에서 이미 활성 상태인 경우 복제기는 오프셋을 덮어쓰지 않습니다. 이는 안전 메커니즘입니다. 그러나 복제기가 오프셋을 동기화할 기회를 갖기 전에 대상에서 소비자를 시작하는 경우 해당 소비자는 변환된 위치가 아닌 대상의 기본 오프셋 재설정 정책(일반적으로 latest 또는 earliest)에서 시작합니다.

  3. 오프셋 동기화에 내재된 지연이 있음

    오프셋 변환은 데이터 복제와 오프셋 동기화라는 두 가지 비동기 프로세스에 따라 달라집니다. 소비자가 소스에서 오프셋을 커밋하는 시점과 변환된 오프셋이 대상에 나타나는 시점 사이에는 항상 약간의 지연이 있습니다. 장애 조치 중에이 지연으로 인해 소스 소비자가 매우 최근에 활성 상태였던 경우 소비자가 예상보다 더 많은 메시지를 다시 읽을 수 있습니다.

  4. 소비자 그룹은 복제 필터에 포함되어야 합니다.

    구성된 포함 패턴과 일치하는(제외 패턴과 일치하지 않는) 소비자 그룹만 오프셋이 동기화됩니다. 소비자 그룹의 오프셋이 대상에 표시되지 않는 경우 소비자 그룹 복제 구성에 포함되어 있는지 확인합니다.

  5. 단방향 복제기는 장애 복구를 지원하지 않습니다.

    레거시(단방향) 오프셋 동기화를 사용하면 오프셋이 소스에서 대상으로만 변환됩니다. 소비자를 대상으로 이동하고 나중에 소비자를 소스로 다시 이동해야 하는 경우 올바른 오프셋을 수동으로 확인하거나 재처리를 수락해야 합니다. 장애 복구가 필요한 경우 향상된 오프셋 동기화와 함께 양방향 설정을 사용합니다.

  6. 주제 삭제 및 재생성으로 인해 오프셋 매핑이 무효화될 수 있습니다.

    어느 클러스터에서든 주제가 삭제되고 다시 생성되면 새 주제가 오프셋 0에서 시작되므로 오프셋 매핑이 오래됩니다. 레거시 오프셋 동기화를 사용하면 오프셋 변환이 잘못될 수 있습니다. 향상된 오프셋 동기화는 주제 재생성을 감지하고 매핑을 자동으로 재설정합니다.