3.7. 정리 정책을 사용하여 로그 데이터 제거

이전 로그 데이터를 제거하는 방법은 로그 정리 구성에 따라 결정됩니다.

기본적으로 브로커에 대해 로그 정리가 활성화됩니다.

# ...
log.cleaner.enable=true
# ...

로그 압축 정리 정책을 사용하는 경우 로그 정리를 활성화해야 합니다. 주제 또는 브로커 수준에서 정리 정책을 설정할 수 있습니다. 브로커 수준 구성은 정책이 설정되지 않은 항목의 기본값입니다.

로그를 삭제하거나 컴팩트한 로그를 삭제하거나 둘 다 수행하기 위해 정책을 설정할 수 있습니다.

# ...
log.cleanup.policy=compact,delete
# ...

삭제 정책은 데이터 보존 정책을 사용하여 로그 관리에 해당합니다. 데이터를 영구적으로 보관할 필요가 없을 때 적합합니다. 컴팩트 정책은 각 메시지 키에 대한 최신 메시지를 유지하도록 보장합니다. 메시지 값을 변경할 수 있고 최신 업데이트를 유지하려는 경우 로그 압축이 적합합니다.

정리 정책이 로그를 삭제하도록 설정된 경우 로그 보존 제한을 기반으로 이전 세그먼트가 삭제됩니다. 그렇지 않으면 로그 정리가 활성화되지 않고 로그 보존 제한이 없는 경우 로그가 계속 증가합니다.

로그 압축에 대한 정리 정책이 설정된 경우 로그 헤드 는 순서대로 새 메시지에 대한 쓰기를 사용하여 표준 Kafka 로그로 작동합니다. 로그 정리가 작동하는 컴팩트한 로그의 경우 동일한 키가 있는 다른 레코드가 나중에 로그에서 발생하는 경우 레코드가 삭제됩니다. 값이 null인 메시지도 삭제됩니다. 키를 사용하지 않는 경우 관련 메시지를 식별하는 데 키가 필요하므로 압축을 사용할 수 없습니다. Kafka는 각 키의 최신 메시지가 유지되도록 보장하지만 압축되지 않은 전체 로그에는 중복이 포함되지 않습니다.

그림 3.1. 압축하기 전에 오프셋 위치를 사용하여 키 값 쓰기를 표시하는 로그

키 값 쓰기를 표시하는 압축 이미지

Kafka 압축은 메시지를 식별하기 위해 키를 사용하여 특정 메시지 키에 대한 최신 메시지(가장 높은 오프셋)를 유지하여 결국 동일한 키가 있는 이전 메시지를 삭제합니다. 즉, 최신 상태의 메시지를 항상 사용할 수 있으며 특정 메시지에 대한 오래된 레코드는 로그 정리가 실행될 때 결국 제거됩니다. 메시지를 이전 상태로 복원할 수 있습니다.

레코드는 레코드가 삭제되는 경우에도 원래 오프셋을 유지합니다. 결과적으로, 테두리는 일치하지 않는 오프셋을 가질 수 있습니다. 테일에서 더 이상 사용할 수 없는 오프셋을 사용할 때 다음 오프셋이 있는 레코드가 검색됩니다.

그림 3.2. 압축 후 로그

로그 정리 후 압축 이미지

컴팩트한 정책만 선택하는 경우 로그는 여전히 임의로 커질 수 있습니다. 이 경우 정책을 컴팩트 하고 삭제하도록 설정할 수 있습니다. 컴팩트하고 삭제하도록 선택하는 경우 먼저 로그 데이터를 압축하여 로그 헤드에 키가 있는 레코드를 제거합니다. 그런 다음 로그 보존 임계값보다 먼저 속하는 데이터가 삭제됩니다.

그림 3.3. 로그 보존 지점 및 압축 지점

보존 지점을 통한 압축 이미지

로그가 밀리초 단위의 정리에 대해 확인되는 빈도를 설정합니다.

# ...
log.retention.check.interval.ms=300000
# ...

로그 보존 설정과 관련된 로그 보존 검사 간격을 조정합니다. 보존 크기가 작을수록 더 자주 검사해야 할 수 있습니다.

정리 빈도는 디스크 공간을 관리하기에 충분하지만 주제의 성능에 영향을 미치는 경우는 아닙니다.

정리할 로그가 없는 경우 더 정리를 위해 시간을 밀리초 단위로 설정할 수도 있습니다.

# ...
log.cleaner.backoff.ms=15000
# ...

이전 로그 데이터를 삭제하도록 선택하는 경우 삭제된 데이터를 제거하기 전에 보존하도록 기간을 밀리초 단위로 설정할 수 있습니다.

# ...
log.cleaner.delete.retention.ms=86400000
# ...

삭제된 데이터 보존 기간을 사용하면 데이터가 삭제되지 않게 삭제되기 전에 데이터를 확인할 수 있는 시간이 제공됩니다.

특정 키와 관련된 모든 메시지를 삭제하기 위해 생산자는 tombstone 메시지를 보낼 수 있습니다. tombstone 는 null 값을 가지며 사용자에게 값이 삭제되었음을 알리는 마커 역할을 합니다. 압축 후, only the tombstone이 유지되며 소비자는 메시지가 삭제된다는 것을 알 수 있도록 충분한 기간 동안 보관해야합니다. 이전 메시지가 삭제되면 값이 없는 경우 파티션에서 tombstone 키도 삭제됩니다.