이 게시물은 카프카 주제 아키텍처,카프카 프로듀서 아키텍처,카프카 소비자 아키텍처 및 카프카 생태계 아키텍처를 포함하는 카프카 아키텍처에 대한 시리즈에서 실제로 발췌했습니다.
이 기사는 로그 압축에 관한 디자인에 대한 카프카 섹션에서 크게 영감을 얻었습니다. 당신은 통나무 압축 주위에 카프카 디자인에 대한 절벽 노트로 생각할 수 있습니다.
카프카는 로그의 시간 또는 크기에 따라 이전 레코드를 삭제할 수 있습니다. 카프카는 또한 기록 키 압축을위한 로그 압축을 지원합니다. 로그 압축은 카프카가 레코드의 최신 버전을 유지하고 로그 압축 중에 이전 버전을 삭제한다는 것을 의미합니다.
장 폴 아자르는 클라우드터블에서 일하고 있다. 클라우드터블은 카프카 교육,카프카 컨설팅,카프카 지원을 제공하고 카프카 클러스터를 구축할 수 있도록 지원합니다.
카프카 로그 압축
로그 압축은 단일 토픽 파티션의 각 레코드 키에 대해 마지막으로 알려진 값 이상을 유지합니다. 압축된 로그는 충돌 또는 시스템 오류 후 상태를 복원하는 데 유용합니다.
메모리 내 서비스,영구 데이터 저장소,캐시 다시로드 등에 유용합니다. 데이터 스트림의 중요한 사용 사례는 데이터베이스 테이블에 대한 변경,변경 가능한 데이터 변경 또는 메모리 내 마이크로 서비스의 개체 변경에 대한 변경 사항을 기록하는 것입니다.
로그 압축은 각 키에 대한 마지막 업데이트를 유지하는 세분화된 보존 메커니즘입니다. 로그 압축 항목 로그에는 최근에 변경된 키뿐만 아니라 모든 레코드 키에 대한 최종 레코드 값의 전체 스냅숏이 포함됩니다.
카프카 로그 압축을 사용하면 다운스트림 소비자가 로그 압축 항목에서 상태를 복원할 수 있습니다.
카프카 로그 압축 구조
압축 된 로그를 사용하면 로그에 머리와 꼬리가 있습니다. 압축된 로그의 머리는 전통적인 카프카 로그와 동일합니다. 새 레코드가 머리 끝에 추가됩니다.
모든 로그 압축은 로그의 꼬리에서 작동합니다. 꼬리 만 압축됩니다. 로그의 꼬리 부분에 있는 레코드는 압축 정리로 다시 작성된 후 기록될 때 원래 오프셋을 유지합니다.
카프카 로그 압축 구조
카프카 로그 압축 기본 사항
소비자가 다음으로 높은 오프셋을 얻을 수 있으므로 오프셋에서 레코드가 압축된 경우에도 모든 압축된 로그 오프셋은 유효합니다.
카프카 로그 압축은 또한 삭제를 허용합니다. 키와 널 페이로드가 있는 메시지는 해당 키에 대한 삭제 마커 인 삭제 표시와 같은 역할을합니다. 삭제 표시 기간 후 삭제 얻을. 로그 압축은 로그 세그먼트를 다시 복사하여 백그라운드에서 주기적으로 실행됩니다. 압축은 읽기를 차단하지 않으며 생산자와 소비자의 입출력에 영향을 주지 않도록 제한할 수 있습니다.
카프카 로그 압축 프로세스
카프카 로그 압축 청소
카프카 소비자가 로그의 머리 위로 계속 잡으면 기록되는 모든 레코드가 표시됩니다.
주제 구성 min.compaction.lag.ms
메시지를 압축하기 전에 통과해야 하는 최소 기간을 보장하는 데 사용됩니다. 소비자가 토픽 구성 delete.retention.ms
(기본값은 24 시간)보다 작은 기간으로 로그의 머리에 도달하는 한 소비자는 모든 삭제 표시를 봅니다. 로그 압축은 메시지를 다시 주문하지 않으며 일부를 제거합니다. 메시지에 대한 파티션 오프셋은 절대 변경되지 않습니다.
로그 시작부터 읽는 모든 소비자는 기록 된 순서대로 모든 레코드의 최종 상태를 봅니다.
카프카 로그 클리너
카프카 주제에 로그가 있음을 상기하십시오. 로그는 파티션으로 분할되고 파티션은 키와 값이 있는 레코드를 포함하는 세그먼트로 분할됩니다.
카프카 로그 클리너는 압축을 기록합니다. 로그 클리너에는 백그라운드 압축 스레드 풀이 있습니다. 이러한 스레드는 로그 세그먼트 파일을 다시 복사하여 키가 최근에 로그에 다시 나타나는 이전 레코드를 제거합니다. 각 압축 스레드는 로그 헤드와 로그 테일 비율이 가장 높은 토픽 로그를 선택합니다. 그런 다음 압축 스레드는 로그를 처음부터 끝까지 다시 복사하여 나중에 로그에서 키가 발생하는 레코드를 제거합니다.
로그 클리너가 로그 파티션 세그먼트를 정리하면 세그먼트가 로그 파티션으로 교체되어 이전 세그먼트를 즉시 대체합니다. 이 방법으로 압축은 필요한 추가 디스크 공간이 하나의 추가 로그 파티션 세그먼트(분할 및 정복)이기 때문에 전체 파티션의 두 배 공간을 필요로하지 않습니다.
로그 압축에 대한 토픽 구성
토픽에 대한 압축을 켜려면 토픽 구성 log.cleanup.policy=compact
을 사용합니다.
기록 후 레코드 압축 시작 지연을 설정하려면 항목 구성 log.cleaner.min.compaction.lag.ms
을 사용합니다. 이 기간이 끝날 때까지 레코드가 압축되지 않습니다. 이 설정은 소비자가 모든 레코드를 얻을 수있는 시간을 제공합니다.
로그 압축 검토
카프카가 레코드를 삭제할 수 있는 세 가지 방법은 무엇입니까?
카프카는 로그의 시간 또는 크기에 따라 이전 레코드를 삭제할 수 있습니다. 카프카는 또한 기록 키 압축을위한 로그 압축을 지원합니다.
통나무 압축은 무엇을 위해 좋습니까?
로그 압축은 마지막으로 알려진 값을 유지하므로 최신 레코드의 전체 스냅숏입니다. 다운 스트림 소비자가 자신의 상태를 복원 할 수 있습니다.
압축 로그의 구조는 무엇입니까? 구조를 설명하십시오.
압축 된 로그로 로그에는 머리와 꼬리가 있습니다. 압축된 로그의 머리는 전통적인 카프카 로그와 동일합니다. 새 레코드가 머리 끝에 추가됩니다. 모든 로그 압축은 압축된 로그의 꼬리에서 작동합니다.
압축 후 로그 레코드 오프셋이 변경됩니까? 아뇨
파티션 세그먼트란?
주제에 로그가 있음을 상기하십시오. 토픽 로그는 파티션으로 분할되고 파티션은 키와 값이 있는 레코드를 포함하는 세그먼트 파일로 분할됩니다. 세그먼트 파일은 압축을 기록 할 때 분할 및 정복을 허용합니다. 세그먼트 파일은 파티션의 일부입니다. 로그 클리너가 로그 파티션 세그먼트를 정리하면 세그먼트가 이전 세그먼트 파일을 즉시 대체하는 로그 파티션으로 교체됩니다. 이 방법으로 압축은 필요한 추가 디스크 공간이 하나의 추가 로그 파티션 세그먼트이기 때문에 전체 파티션의 두 배 공간을 필요로하지 않습니다.
장 폴 아자르는 클라우드터블에서 일하고 있다. 클라우드터블은 카프카 교육,카프카 컨설팅,카프카 지원을 제공하고 카프카 클러스터를 구축할 수 있도록 지원합니다.