메시지 재생 및 삭제

가져오기와 같은 Pub/Sub 구독자 데이터 API는 메시지 데이터에 대한 제한된 액세스를 제공합니다. 일반적으로 확인된 메시지는 해당 구독의 구독자가 액세스할 수 없습니다. 또한 구독자 클라이언트는 하위 집합만 필요한 경우에도 구독의 모든 메시지를 처리해야 합니다.

탐색 기능은 대량의 메시지 확인 상태를 변경할 수 있는 구독자의 확장된 기능입니다. 예를 들어 이전에 확인한 메시지를 다시 보거나 메시지를 대량으로 삭제할 수 있습니다. 또한 스냅샷을 사용하여 하나의 구독 상태를 다른 구독으로 복사할 수 있습니다.

이러한 기능은 아래에 설명되어 있습니다. 빠른 시작에서 실제 예제를 볼 수 있습니다.

기본 원리

타임스탬프 탐색

시간 탐색은 시간이 확인되기 전에 Pub/Sub에서 수신한 모든 메시지와 해당 시간 이후에 수신된 모든 메시지를 수신 미확인으로 표시합니다. 미래의 시간을 탐색하여 메시지를 삭제할 수 있습니다. 이전에 확인된 메시지를 재생하거나 다시 처리하려면 이전 시간으로 탐색하세요. 메시지 게시 시간은 Pub/Sub 서버에서 생성됩니다(API 참조의 publishTime 참조). 이 접근 방법은 다음과 같은 이유로 부정확합니다.

  • Pub/Sub 서버 간의 시계 보정값이 발생할 수 있습니다.

  • Pub/Sub가 소스 시스템에서 이벤트가 발생했을 때가 아닌 게시 요청의 도착 시간을 처리해야 합니다.

이전 시간을 탐색하려면 우선 확인 메시지를 보관하도록 구독을 구성해야 합니다.

스냅샷 탐색

스냅샷 기능을 사용하면 구독의 메시지 확인 상태를 캡처할 수 있습니다. 스냅샷을 만들면 다음이 보관됩니다.

  • 스냅샷 생성 시 소스 구독에 확인되지 않은 모든 메시지

  • 그 이후에 주제에 게시된 모든 메시지

스냅샷을 사용하면 모든 주제의 구독을 탐색하여 확인되지 않은 메시지를 재생할 수 있습니다.

시간 탐색과 달리 스냅샷 탐색에는 특별한 구독 구성을 수행할 필요가 없습니다. 스냅샷을 미리 만들기만 하면 됩니다. 예를 들어 예상치 못한 확인 또는 오류가 있는 확인으로부터 복구해야 하는 경우에 대비하여 새 구독자 코드를 배포할 때 스냅샷을 만들 수 있습니다.

다음의 경우 스냅샷이 만료되어 삭제됩니다(둘 중 더 이른 날짜부터).

  • 스냅샷 수명인 7일에 도달한 경우
  • 스냅샷에서 확인되지 않은 가장 오래된 메시지가 message retention duration을 초과한 경우

예를 들어 확인되지 않은 가장 오래된 메시지가 있는 하루 경과한 백로그가 있는 구독의 스냅샷을 고려해 보세요. 이 스냅샷은 7일이 아닌 6일 후에 만료됩니다. 이 타임라인을 사용해야 스냅샷이 최소 한 번의 전송을 확실히 보장하게 됩니다.

eventual consistency

탐색 작업은 메시지 전송 보장과 관련하여 일관성을 엄격히 유지합니다. 즉, 탐색 조건에 따라 확인되지 않은 모든 메시지는 탐색 작업이 성공한 후에 최소 한 번은 전송되도록 보장됩니다. 그러나 전송된 메시지가 즉시 탐색 작업과 일치하게 되는 것은 아닙니다. 따라서 타임스탬프 탐색 전에 게시된 메시지 또는 스냅샷에서 확인된 메시지는 탐색 작업 이후에도 전송될 수 있습니다. 메시지 전송은 결국 탐색 작업과 일관성 있는 시스템으로 작동한다고 볼 수 있습니다. 이 작업이 적용되려면 1분 정도 소요됩니다.

활용 사례

  • 구독자 코드를 안전하게 업데이트하세요. 새 구독자 코드를 배포할 때 우려되는 점은 새 실행 파일이 메시지를 잘못 확인하여 메시지가 손실될 수 있다는 것입니다. 배포 프로세스에 스냅샷을 통합하면 버그가 있는 새로운 구독자 코드를 복구할 수 있습니다.
  • 예상치 못한 구독자 문제를 해결하세요. 구독자 문제가 특정 배포 이벤트와 관련이 없는 경우 관련 스냅샷이 없을 수 있습니다. 확인된 메시지 보관을 사용하도록 설정한 경우 과거 시간으로 탐색하여 오류를 복구할 수 있습니다.
  • 처리 시간과 비용을 절약하세요. 더이상 관련이 없는 대량의 메시지 백로그에 대한 일괄 확인을 수행합니다.
  • 알려진 데이터에 구독자 코드를 테스트하세요. 성능 및 일관성을 위한 구독자 코드를 테스트할 때, 모든 실행에서 동일한 데이터를 사용하는 것이 유용합니다. 스냅샷은 강력한 시맨틱스로 데이터를 일관성을 높입니다. 또한 스냅샷은 새로 만들어진 주제를 비롯해 모든 주어진 주제에 대한 구독에 적용될 수 있습니다.

데드 레터 주제 및 재시도 정책으로 찾기

구독에서 데드 레터 문자가 포함된 메시지를 찾는 경우 Pub/Sub는 전송 시도를 0으로 설정합니다.

재시도 정책이 포함된 구독에서 메시지를 찾는 경우 Pub/Sub는 다음 간의 지연을 재설정합니다.

  1. 확인 기한 만료 또는 구독자가 부정 확인 전송
  2. Pub/Sub가 메시지 다시 전송

다음 단계

Dataflow로 Pub/Sub를 사용할 수 있습니다. 그러나 실행 중인 Dataflow 파이프라인에서 Pub/Sub Seek에 직접 액세스하는 것은 권장하지 않습니다. 권장 워크플로에 대해서는 Dataflow로 Cloud Pub/Sub 사용을 참조하세요.