데이터 엔지니어 기술 블로그

[🔥Spark] StreamingQueryException: Cannot find earliest offsets of Set(topic-name-0) 본문

데이터 엔지니어링

[🔥Spark] StreamingQueryException: Cannot find earliest offsets of Set(topic-name-0)

jun_yeong_park 2021. 11. 2. 23:53
반응형

전체 에러 메세지

StreamingQueryException: Cannot find earliest offsets of Set(topic-name-0). Some data may have been missed. Some data may have been lost because they are not available in Kafka any more; either the data was aged out by Kafka or the topic may have been deleted before all the data in the topic was processed. If you don't want your streaming query to fail on such cases, set the source option "failOnDataLoss" to "false".

 

원인

1. 스트리밍 쿼리가 실행되다가 어떠한 이유로 종료가 되었다. 마지막으로 처리한 오프셋은 4이다.

2. 새로운 메세지가 20까지 들어온다.

3. 카프카에서 메세지 보존 정책으로 10이하의 모든 메세지가 삭제된다.

4. 스트리밍 쿼리를 다시 실행했을 때 오프셋 5부터 시작해야하지만 메세지는 11부터 있으므로 오류가 발생한다.

 

 

해결 방법

1. failOnDataLoss 옵션을 false로 둔다.

 

failOnDataLoss란?

Whether to fail the query when it's possible that data is lost (e.g., topics are deleted, or offsets are out of range). This may be a false alarm. You can disable it when it doesn't work as you expected.
  • topic이 삭제되거나 offset이 범위를 벗어난 경우 쿼리를 실패한다.
  • 잘못된 경보일 수 있으니 예상대로 동작하지 않으면 비활성화하면 된다.
  • 이 값을 false로 두고, 실패 후 재시작시 토픽의 first offset 부터 시작한다.
  • .option("failOnDataLoss", "false")

 

2. 기존의 체크포인트 파일을 삭제하거나 다른 이름으로 바꾼다.

 

반응형
Comments