Kafka

[Kafka] 'Topic과 Partition'에 대해 알아보자

hyunjuuun.dev 2024. 2. 28. 08:50

 

 

 

Topic

  • Topic은 카프카 클러스터 내의 특정한 데이터 스트림을 의미한다.
  • 하나의 Kafka cluster가 다수의 토픽을 가질 수 있다.
    • ex)로그 토픽, 구매 토픽, 댓글 토픽

  • 비유하자면 DB의 테이블이라고 할 수 있다.
    • 테이블과 다르게 constraint은 존재하지 않는다. 카프카 토픽으로 무엇을 보내더라도 데이터에 대한 검증은 이루어지지 않는다.
  • 클러스터 내의 토픽 간의 구분은 name을 통해 이루어진다.
  • 다양한 메시지 포맷을 지원한다.

Partition

  • 토픽은 파티션으로 나뉜다.
    • ex) 특정한 토픽이 [파티션 0, 파티션 1, 파티션 2] 3개의 파티션을 가질 수 있다.
  • 토픽으로 보내진 메시지는 이러한 파티션들에게로 순차적으로 전달된다.
  • 한 번 파티션에 저장된 메시지는 immutable하다. 즉 해당 데이터를 삭제하거나 수정할 수 없다.
  • 데이터는 제한된 기간 동안만 저장된다. (기본 설정은 1주일)
  • 각 파티션에 보내진 메시지들은 0부터 순차적으로 증가하는 id 값을 가진다. (offset)
  • 각 파티션은 서로 다른 오프셋을 가진다. (파티션 0의 오프셋 1과 파티션 1의 오프셋 1은 서로 다른 데이터를 가진다) 따라서 메시지 간의 순서는 각 파티션을 기준으로만 보장된다.
  • 한 번 증가한 오프셋 번호는 메시지가 지워지더라도 재사용 되지 않는다.
  • key를 설정하지 않는다면 데이터는 랜덤한 파티션에 저장되게 된다.
  • 원하는 개수만큼의 파티션을 설정할 수 있다. (어떤 기준으로 하면 될지는 추후 학습)

 

ex) 토픽 사용 예시

몇 대의 트럭이 자신의 gps 위치 정보에 대한 메시지를 20초마다 카프카로 전송한다.

해당 데이터를 위치 대시보드를 보여주는 서비스, 고객에게 배송이 임박했다는 알림을 주는 서비스 등 여러 실시간 서비스에 동시에 사용할 수 있을 것이다.

 

참고)

https://www.udemy.com/course/apache-kafka-korean