ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • apache kafka Topic
    Data Base/Kafka 2022. 9. 5. 13:38

    Topic

    카프카에는 다양한 데이터가 들어 갈 수 있는데, 그 데이터가 들어 갈 수 있는 공간을 Topic이라고 한다. 이 카프카 Topic은 AMQP와는 다르게 동작한다.

     

     

    카프카에서는 토픽을 여러개 생성할 수 있다. Topic은 데이터베이스의 테이블이나 파일시스템의 폴더와 유사한 성질을 가지고 있는데, 이 토픽에 Producer 데이터를 넣게되고 Consumer는 데이터를 가져가게된다.

     

    Topic은 이름을 가질 수 있는데, 목적에 따라 클릭로그,send sms,location log 등과 같이 무슨 데이터를 담는지 명확하게 명시하면 추후 유지보수 시 편리하게 관리 할 수 있다.

     

    Topic 내부

     

    하나의 토픽은 여러개의 파티션으로 구성될 수 있으며, 첫번째 파티션 번호는 0번부터 시작한다. 하나의 파티션은 Queue 와 같이 내부에 대이터가 파티션 끝에서부터 차곡차곡 쌓이게 된다.

     

    클릭로그 토픽에 카프카 컨슈머가 붙게되면 데이터를 가장 오래된 순서대로 가져오게 된다. 더 이상 데이터가 들어오지 않으면 Consumer는 또 다른 데이터가 들어올때까지 기다린다.

     

    Consumer가 Topic내부의 파티션에서 데이터를 가져가더라도 데이터는 삭제되지 않는다.  파티션에 그대로 남게된다. 그렇다면 이 파티션에 남은 데이터는 누가 또 사용하게 되는 것일까?

    - 컨슈머 그룹이 다를 경우
    - auto.offset.reset = earlierst

    이와 같이 사용할 때 동일 데이터에 대해서 두번 처리할 수 있는데 이것은 카프카를 사용하는 중요한 이유이기도 하다.

     

    클릭로그를 분석하고 시각화 하기 위해 엘라스틱서치에 저장하기도하고 클릭로그를 백업하기 위해 하둡에 저장할 수 도 있다.

     

    Partition이 2개 이상인 경우 

    파티션이 1개 더 늘어난 상황이다. 이때 데이터 7이 Topic에 들어가야하는데 어느 파티션에 들어 가야 할까?

    -> Producer가 데이터를 보낼 때 key를 지정할 수 있다.

    1) key가 null이고, 기본 파티션너를 사용할 경우 
    라운드 로빈(Round robin)으로 할당

    2)key가 있고, 기본 파티셔너를 사용할 경우
    key 해시(hash)값을 구하고, 특정 파티션에 할당

     

    이번 경우에는 key를 따로 설정하는 것을 가정하지 않았으므로 데이터 7은 파티션 1번으로 들어간다. 그리고 라운드 로빈으로 데이터가 파티션에 나눠져서 들어가게 된다.

     

    이제 파티션을 한 개더 늘려서 3개가 되었다. 그런데 파티션을 늘리는 것은 아주 조심해야한다. 파티션을 늘리는 것은 조심해야 한다. 왜냐하면 파티션을 늘릴 수는 있지만 줄일 수 는 없다.그런데 왜 파티션의 갯수를 늘리는 것일까?

     

    Partition의 record는 언제 삭제되는가?
    -> log.retention.ms : 최대 record 보존 시간
    -> log.retention.byte : 최대 record 보존 크기(byte)

    파티션을 늘리면 컨슈머의 개수를 늘려서 데이터처리를 분산 시킬 수 있다. 이런 식으로 파티션이 계속늘어나면 데이터(record)는 언제 삭제될까? 삭제되는 타이밍은 option에 따라 다르다. record 생성시 레코드가 저장되는 최대 시간과 크기를 지정할 수 있다.

     

    이를 지정하게 되면 일정한 기간동안 혹은 용량만큼만 데이터를 저장할 수 있고, 적절하게 데이터가 삭제될 수 있도록 설정 할 수 있다.

     

    출처 -[https://youtu.be/7QfEpRTRdIQ]

    'Data Base > Kafka' 카테고리의 다른 글

    apache kafka 핵심요소 3가지(Broker, Replication, ISR)  (0) 2022.09.06
    apache kafka 개요  (0) 2022.09.02

    댓글

Designed by Tistory.