[Kafka] 토픽이란?

1. Topic

  • 카프카에서는 토픽을 여러개 생성 할 수 있습니다.
  • 토픽은 이름을 가질 수 있는데, ‘click_log’, ‘send_sms’ 와 같이 어떤 데이터를 담는지 명시적으로 표현하면 여러모로 용이합니다.

2. 파티션

  • 하나의 토픽은 여러개의 파티션으로 구성될 수 있습니다. (시작은 0번부터)
  • 하나의 파티션은 큐와 같이 내부의 데이터가 파티션 끝에서부터 쌓이게 됩니다.
  • 이 파티션에 Consumer가 붙게 되면 가장 오래된 데이터부터 가져가게 됩니다.
  • 더 이상 데이터가 들어오지 않으면 데이터가 들어올 때까지 기다립니다.
  • Consumer가 데이터(record)들을 가져가도 데이터는 삭제되지 않습니다.
  • 남은 데이터는 새로운 Consumer를 기다립니다.

스크린샷 2021-08-13 오후 5 56 59

3. 파티션이 두 개 이상일 때

스크린샷 2021-08-13 오후 5 58 01

  • 위와 같이 RR or Hash를 통해 배분을 하게 됩니다.
  • 파티션을 늘리는 것은 조심해야합니다.
    • 파티션은 늘릴 수는 있지만 줄일 수는 없습니다!
  • 그렇다면… 파티션을 늘리는 이유
    • 파티션을 늘리면 컨슈머 갯수를 늘려서 데이터 처리를 분산 시킬 수 있습니다.
  • 파티션의 데이터는 언제 삭제 될까?
    • 레코드가 저장되는 최대 시간과 크기를 지정 할 수 있습니다
    • log.retention.ms: 최대 record 보존 시간
    • log.retention.byte: 최대 record 보존 크기 (byte)