Invalid Resume Token
개요
MongoDB Kafka 소스 커넥터에서 잘못된 재개 토큰을 복구하는 방법을 알아봅니다.
스택 추적
다음 스택 추적은 소스 커넥터에 잘못된 재개 토큰이 있음을 나타냅니다.
... org.apache.kafka.connect.errors.ConnectException: ResumeToken not found. Cannot create a change stream cursor ... Command failed with error 286 (ChangeStreamHistoryLost): 'PlanExecutor error during aggregation :: caused by :: Resume of change stream was not possible, as the resume point may no longer be in the oplog ...
원인
소스 커넥터의 재개 토큰의 ID가 MongoDB 배포의 oplog에 있는 항목과 일치하지 않으면 커넥터가 MongoDB 변경 스트림 처리 시작 위치를 결정할 수 없습니다. 이러한 문제가 발생할 수 있는 시나리오를 확인하려면 다음 탭을 클릭하십시오.
이 시나리오에서는 소스 커넥터를 일시 중지하고 MongoDB 배포서버의 oplog를 채웁니다.
MongoDB Kafka 소스 커넥터를 사용하여 Kafka 배포를 시작합니다.
소스 MongoDB 네임스페이스에서 변경 이벤트를 생성하고 커넥터는 이 이벤트에 해당하는 재개 토큰을 저장합니다.
소스 커넥터를 일시 중지합니다.
커넥터가 일시 중지되는 동안, MongoDB가 재개 토큰에 해당하는 oplog 항목을 삭제하도록 MongoDB oplog를 채웁니다.
소스 커넥터를 다시 시작해도 MongoDB oplog에 해당 재개 토큰이 없기 때문에 처리를 재개할 수 없습니다.
이 시나리오에서는 소스 connector 가 자주 업데이트되지 않는 MongoDB 네임스페이스에서 변경 사항을 수신 대기하며 하트비트 기능 이 활성화되지 않습니다.
MongoDB Kafka 소스 커넥터를 사용하여 Kafka 배포를 시작합니다.
소스 MongoDB 네임스페이스에서 변경 이벤트를 생성하고 커넥터는 이 이벤트에 해당하는 재개 토큰을 저장합니다.
소스 MongoDB 네임스페이스 는 MongoDB deployment 가 재개 토큰에 해당하는 변경 이벤트 를 해당 oplog 밖으로 로테이션하는 데 걸리는 시간 동안 업데이트되지 않습니다.
소스 MongoDB 네임스페이스에서 변경 이벤트를 생성하고 connector 해당 재개 토큰이 에 존재하지 않으므로 소스 MongoDB oplog 가 처리를 재개할 수 없습니다.
oplog에 대한 자세한 내용은 MongoDB 매뉴얼을 참조하세요.
변경 스트림에 대한 자세한 내용은 Change Streams 가이드 를 참조하세요.
솔루션
다음 전략 중 하나를 사용하여 유효하지 않은 재개 토큰을 복구할 수 있습니다.
일시적으로 오류 허용하기
connector 의 재개 토큰을 업데이트하는 변경 스트림 이벤트를 생성하는 동안 오류를 허용하도록 소스 connector 를 구성할 수 있습니다. 이 복구 전략은 가장 간단하지만, connector 가 잘못된 재개 토큰과 관련이 없는 오류를 잠시 무시할 위험이 있습니다. 배포서버에서 잠시 오류를 허용하는 것이 힘들다면 대신 저장된 오프셋을 삭제할 수 있습니다.
일시적으로 오류를 허용하도록 소스 커넥터를 구성하려면:
errors.tolerance
옵션을 설정하여 모든 오류를 허용하도록 합니다.errors.tolerance=all 소스 커넥터가 참조하는 컬렉션에서 문서를 삽입, 업데이트 또는 삭제하여 커넥터가 재개 토큰을 업데이트하는 변경 스트림 이벤트를 생성합니다.
변경 스트림 이벤트를 생성한 후에는
errors.tolerance
옵션을 설정하여 더 이상 오류를 허용하지 않도록 합니다.errors.tolerance=none
errors.tolerance
옵션 관련 세부 사항은 오류 처리 및 중단 후 다시 시작 속성 페이지를 참조하십시오.
저장된 오프셋 재설정하기
재개 토큰을 포함하는 Kafka Connect 오프셋 데이터를 재설정하여 커넥터가 변경 스트림 처리를 재개하도록 할 수 있습니다.
오프셋 데이터를 재설정하려면 offset.partition.name
구성 속성의 값을 Kafka 배포에 없는 파티션 이름으로 변경합니다. 다음과 같이 offset.partition.name
속성을 설정할 수 있습니다.
offset.partition.name=<a string>
팁
오프셋 파티션 이름 지정하기
오프셋 파티션 이름을 지정할 때 다음 패턴을 사용하는 것이 좋습니다.
offset.partition.name=<source connector name>.<monotonically increasing number>
이 패턴에는 다음과 같은 이점이 있습니다.
커넥터 재설정 횟수 기록하기
오프셋 파티션 커넥터가 속한 문서
예를 예시 소스 connector 의 이름을 "source-values"
으로 지정하고 offset.partition.name
속성 을 처음 설정하는 경우 다음과 같이 connector 를 구성합니다.
offset.partition.name=source-values.1
이후에 커넥터의 오프셋 데이터를 재설정할 때는 커넥터를 다음과 같이 구성합니다.
offset.partition.name=source-values.2
offset.partition.name
구성 속성 관련 세부 사항은 오류 처리 및 중단에서 다시 시작 속성 페이지를 참조하십시오.
이름 지정에 대해 connector 자세히 알아보려면 공식 를 Apache Kafka 참조하세요. 문서화.
방지
자주 업데이트되지 않는 네임스페이스 로 인해 발생하는 잘못된 재개 토큰 오류를 방지하려면 하트비트 를 활성화합니다. 하트비트는 소스 connector 의 기능으로, connector 가 소스 MongoDB 네임스페이스의 콘텐츠가 변경될 때뿐만 아니라 정기적으로 재개 토큰을 업데이트하도록 합니다.
하트비트를 활성화하려면 소스 커넥터 구성에서 다음 옵션을 지정합니다.
heartbeat.interval.ms=<a positive integer>
하트비트 관련 세부 사항은 오류 처리 및 중단 후 재개 속성 가이드를 참조하십시오.