ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 4장. 카프카 상세 개념 - 토픽과 파티션
    📕 book/아파치 카프카 2023. 1. 17. 13:52

    4장. 카프카 상세 개념 - 토픽과 파티션

    ⭐ 토픽과 파티션


    토픽은 카프카의 시작과 끝이다.

    • 토픽을 만들면서 카프카를 사용하기 시작한다.

    토픽에 대해 잘 이해하고 설정을 잘하는 것이 카프카를 통한 데이터 활용도를 높이는 것이다!!

     

    📌 적정 파티션 개수

    토픽의 파티션 개수는 카프카 성능과 관련있다.

    토픽 생성 시 파티션 개수 고려사항

    • 데이터 처리량
    • 메시지 키 사용 여부
    • 브로커, 컨슈머 영향도

     

    데이터 처리량

    파티션은 카프카 병렬처리의 핵심이다.

    • 파티션의 개수가 많아질 수록 매핑되는 컨슈머 개수가 증가하기 때문
    • 따라서, 파티션 개수를 정할 때 토픽에 필요한 데이터 처리량을 측정해 정하는 것이 중요

     

    파티션 개수만큼 컨슈머 스레드를 운영하면 토픽의 병렬처리를 극대화 할 수 있다.

     

    👀 컨슈머 전체 데이터 처리량이 프로듀서 데이터 처리량보다 많아야 한다.

    • 적다면 컨슈머 렉 발생 + 데이터 처리 지연 발생

     

    ❓컨슈머 데이터 처리량을 구하는 방법

    ❗상용에서 운영중인 카프카에서 더미 데이터로 테스트해보기

     

    컨슈머 데이터 처리량을 구하고 난뒤는 프로듀서가 보내는 데이터의 양을 하루, 시간, 분 단위로 쪼개서 예측

    • 데이터 지연이 발생해도 되는지 아닌지에 따라서 데이터 생성량의 최대치를 어떤 것으로 잡을 지 정하면 된다.

     

    ❓ 그럼 파티션 개수를 계속 늘리면 좋아지는 것이 아닌가

    ❗파티션 개수를 늘리면 컨슈머, 브로커의 부담이 있어 그런 것은 아니다

    ⇒ 데이터를 처리하는데 지연 발생에 따른 서비스 영향도를 같이 고려해야 한다.

     

    메시지 키 사용 여부

    💡 메시지 키를 사용함과 동시에 데이터 처리 순서를 지켜야 하는 경우에 대해 고려해야 한다.
        - 메시지 키 사용 여부는 데이터 처리 순서와 밀접한 연관이 있다

     

    ❔ 만약 메시지 키를 사용할 경우

    • 프로듀서가 토픽으로 데이터를 보낼 때 메시지 키를 해시 변환하여 파티션에 매칭한다.
    • 이때, 파티션의 개수가 달라지면 이미 매칭된 파티션과 메시지 키의 매칭이 깨진다.
    • 전혀 다른 파티션에 데이터가 할당
    • 따라서, 파티션 개수가 달라지면 컨슈머는 특정 메시지 키의 순서를 더는 보장받지 못한다.
    1.  

     

    1. 메시지 키를 사용하고 컨슈머에서 메시지 처리 순서가 보장되어야 할 때
      • 최대한 피타션 변화가 없어야 한다.

    ⇒ 파티션 개수를 프로듀서가 전송하는 데이터양보다 더 크게 잡고 생성하는 것이 좋다.

    1. 메시지키를 사용하지만 데이터 처리 순서를 지키지 않을 경우
      • 파티션 개수를 처음부터 크게 잡지 않고 데이터의 양에 따라 파티션을 늘리면 된다.

     

    브로커와 컨슈머 영향

    카프카에서 파티션은 각 브로커의 파일 시스템을 사용하기 때문에 파티션이 늘어나는 만큼 브로커에서 접근하는 파일 개수가 많아진다.

     

    카프카 브로커가 접근하는 파일 개수를 안정적으로 유지하기 위해서는 각 브로커당 파티션 개수를 모니터링 해야 한다.

     

    만약 브로커가 관리하는 파티션이 너무 많다면 파티션의 개수를 분산하기 위해 카프카 브로커 개수를 늘리는 방안도 생각해야 한다.

     

    📌 토픽 정리 정책(cleanup.policy)


    토픽의 데이터는 시간 또는 용량에 따라 삭제 규칙을 적용할 수 있다.

    • 카프카 클러스터가 살아있는 한 토픽의 데이터를 삭제하지 않도록 설정할 수도 있다.

    데이터가 삭제되지 않고 남아 있다면 오프셋을 지정해 이전 데이터를 가져올 수 있다.

     

    ⚠️ 하지만 데이터를 오랫동안 삭제하지 않으면 저장소 사용량이 지속적으로 늘어나게 된다.

     

    데이터를 더는 사용하지 않을 경우 cleanup.policy 옵션을 사용해 데이터를 삭제할 수 있다.

    • delete (완전 삭제)
    • compact (압축 - 동일 메시지 키의 가장 오래된 데이터 삭제)

     

    토픽 삭제 정책(delete)

    일반적으로 cleanup.policy는 delete로 설정한다.

    명시적으로 토픽의 데이터를 삭제하는 것을 뜻하며, 삭제 시 세그먼트 단위로 삭제를 진행한다.

     

    📖 세그먼트

    • 토픽의 데이터를 저장하는 명시적인 파일 시스템 단위
    • 파티션마다 별개로 생성된다
    • 세그먼트 파일의 이름은 오프셋 중 가장 작은 값이 된다.

    • 여러 조각으로 나뉘며, 1개의 세그먼트 크기를 설정할 수 있다.
    • 설정한 크기보다 커질 경우 새로운 세그먼트를 열어 데이터를 저장한다,.
    • 현재 사용중인 세그먼트를 엑티브 세그먼트라고 한다.

     

    삭제 정책이 실행되는 시점은 시간 또는 용량이 기준이 된다.

     

    retention.ms

    • 토픽의 데이터를 유지하는 기간 (밀리초)
    • 세그먼트 파일의 마지막 수정 시간이 retention.ms을 넘어가면 삭제
    • retention.byte : 토픽의 최대 데이터 크기 제어
      • 크기가 넘어가면 삭제

     

    토픽 압축 정책(compact)

    📖 압축

    • 메시지 키별로 해당 메시지 키의 레코드 중 오래된 데이터를 삭제하는 정책

    📖 더티 비율(dirty ratio)

    • 더티 영역 메시지 개수 / (더티 영역 메시지 개수 + 클린 영역 메시지 개수)

     

    ⚠️ 메시지 키를 기준으로 오래된 데이터를 삭제하기 때문에 삭제 정책과 달리 파티션에서 오프셋의 증가가 일정하지 않을 수 있다.

     

    압축 정책은 엑티브 세그먼트를 제외한 나머지 세그먼트들에 한해서만 데이터를 처리한다.

     

    min.cleanable.dirty.ratio

    • 이 값에 따라 토픽의 압축이 수행된다.
    • 더티 비율이 이 값을 넘어가면 압축이 수행된다.
    • 설정한 값이 클 수록 한 번 압축할 때 많은 데이터가 줄어 효과가 좋다.
    • 하지만 비율이 될 때까지 용량을 차지하므로 용량 효율이 좋지 않다.

     

    📌 ISR(In-Sync-Replicas)


    💡 ISR
      - 리더 파티션과 팔로워 파티션이 모두 싱크가 된 상태를 말한다. 

     

    “동기화가 완료” 의 의미

    • 리더 파티션의 모든 데이터가 팔로워 파티션에 복제된 상태
    • 데이터를 안전하게 사용할 수 있다.

     

    ISR 이라는 용어의 등장 이유

    • 팔로워 파티션이 리더 파티션으로부터 데이터를 복제하는 데 시간이 걸리기 때문

    리더 파티션에 새로운 레코드가 추가되어 오프셋이 증가하면 팔로워 파티션이 위치한 브로커는 리더 파티션의 데이터를 복제한다.

     

    replica.lag.time.max.ms

    • replica.lag.time.max.ms 값 만큼의 주기를 가지고 팔로워 파티션이 데이터를 복제하는지 확인한다.
    • 이 값보다 더 긴 시간동안 데이터를 가져가지 않으면 해당 팔로워 파티션에 문제가 생긴 것으로 판단 후 ISR 그룹에서 제외

     

    보통 ISR로 묶인 팔로워 파티션은 리더 파티션으로 선출될 자격을 얻지만 일부 데이터 유실이 발생하더라도 서비스를 중단하지 않고 지속적으로 토픽을 사용하고 싶다면 ISR이 아닌 팔로워 파티션을 리더로 선출할 수 있다.

    • unclean.leader.election.enable 옵션

     

    참고 자료

    http://www.yes24.com/Product/Goods/99122569

    '📕 book > 아파치 카프카' 카테고리의 다른 글

    2장 - 카프카 빠르게 시작해보기  (0) 2023.01.12
    Kafka 스트림즈 구현  (0) 2022.09.18
    3장 - 카프카 스트림즈  (0) 2022.09.18
    3장 - 카프카 기본 개념  (0) 2022.09.18
    1장 - 들어가며  (0) 2022.09.18

    댓글

Designed by Tistory.