[레코드와 파티션]

 

** 파티션은 데이터가 저장되는 공간이고, 이 데이터가 레코드라고 불립니다.

레코드마다 고유한 타임스탬프, 메시지 키, 메시지 값, 오프셋이 지정되서 파티션에 들어가게 됩니다.

타임스탬프
  . 레코드를 생성할 시점이 Unix time으로 들어가게 됨, 브로커에 들어갈 시간, 사용자가 설정한 시간도 들어갈 수 있음
메시지 키 
  . 데이터를 구분하는 값 -> 레코드가 들어갈 파티션을 정하거나, 순서를 정할때 사용하기 유용함
  . 보통의 경우 메시지 키를 따로 설정하지 않으면 NULL 값으로 들어가게 됨

메시지 값  
  . 실제로 사용할 데이터. 직렬화 되어 저장됨

오프셋 
  . 파티션에 저장될 때 레코드 별로 저장되는 번호
  . 한 개의 파티션에는 오프셋이 중복될 수 없음

 

 

[토픽과 파티션]


** 토픽은 파티션들의 묶음
으로, 한 개의 토픽은 일반적인 DB의 Table과 유사한 개념입니다.

토픽의 파티션에 저장된 데이터는 브로커가 데이터를 지우기 전까지는 삭제되지 않습니다.

토픽은 파티션을 한 개 이상 가져야 합니다. 그리고 파티션 개수가 많아질 수록 병렬 처리량을 늘릴 수 있습니다.
-> 컨슈머 그룹을 통해서 파티션 개수가 많을수록 병렬로 처리되는 데이터량, 시간당 처리되는 데이터량을 늘릴 수 있음

토픽 이름은 영대소문자, 숫자, 점, 언더바, 대시로 만들 수 있습니다.

 

 

[파티션 개수의 변경]


** 토픽에 있는 파티션 개수를 변경할 수(늘릴 수) 있음

데이터 처리량을 늘리고 싶을 때, 파티션 개수를 늘려서 처리할 수 있습니다.
-> 파티션 개수만큼 컨슈머 그룹을 늘릴 수 있기 때문
단, 이미 가지고 있는 파티션을 줄이는 것은 불가능합니다.

 

[토픽의 데이터 삭제]

 

** 토픽(파티션)에 저장된 데이터는 개별 삭제가 불가능합니다.

** 데이터의 삭제는 브로커가 관장하며, 토픽 단위로 데이터가 삭제되는 시점을 정할 수 있습니다.
각각의 레코드를 로그(Log)로 보기 때문에, insert/update가 불가능합니다.

데이터 삭제는 아래와 같이 2가지 옵션이 있습니다.
  . cleanup.policy = delete (데이터 레코드의 삭제)

     - retention.ms : 얼마정도 시간이 지나고 나면 삭제 처리
     - retentions.bytes : 얼마정도 데이터가 차고 나면 삭제 처리
  . cleanup.policy = compact (메시지 키 단위로 이전의 데이터를 삭제)
     - 주로 스트리밍 애플리케이션을 만들 때 사용

+ Recent posts