[Kafka] Topic, Partition, Offset에 대하여

Topic

Kafka topic은

kafka 클러스터 안에 있는 데이터 스트림이다.

  • kafka 클러스터에는 많은 토픽이 존재할 수 있다.
  • 원하는 건 모두 Kafka 토픽에 전송할 수 있다. ⇒ 모든 종류의 메시지 형식을 지원(e.g. JSON, Avro, Text, Binary …)
  • Kafka 클러스터 안에서 이름을 이용해 토픽을 식별한다.
  • 토픽 안에 있는 메시지들의 순서 := 데이터 스트림

예를 들어, DB에 테이블을 만들려고 한다면 Topic은 DB의 그 테이블과 비슷할 것이다. 하지만, 토픽을 쿼리할 수 없다. 대신 Kafka 토픽에 데이터를 추가할 수 있다.

Kafka Producer

Topic에 데이터 추가

Kafka Consumer

Topic에서 데이터 읽기

 

Partition

Topic은 파티션으로 분할할 수 있다.

⇒ Kafka 토픽으로 전송된 메시지들은 이 파티션에 들어가게 된다. 이때, 각 파티션 안의 메시지들을 순서가 정해진다.

  • 예를 들어, 하나의 토픽은 100개의 파티션으로 분할될 수 있다.
  • 데이터를 파티션에 기록하면 삭제하거나, 변경할 수 없다.

 

Offset

파티션 안의 메시지들은 각각의 0부터 증가되는 ID를 갖게 되는데, 이때 이 ID가 Kafka 파티션의 Offset이다.

⇒ 각 파티션에는 각각의 오프셋이 있다.

 

예시

위 상황은 트럭의 GPS 데이터를 Kafka를 통해 처리하는 예시이다.

트럭들의 GPS 데이터는 매 20초마다 “trucks_gps”라는 이름을 가진 Kafka 토픽에 전송될 것이다. 그 토픽에는 모든 트럭의 위치가 포함되어 있을 것이고, 토픽은 파티션들로 구성된다. “위치 대시보드”와 “알림 서비스”라는 Consumer에게 데이터를 전달할 수 있다.

동일한 데이터 스트림을 다수의 서비스가 읽을 수 있게 때문에 위와 같은 상황에서 매우 유리하다.

❗ 중요 사항

  • 일단 어떤 데이터가 파티션에 기록되면 그 데이터는 변경되지 않는다.
  • Kafka의 데이터는 일정한 시간 동안만 유지된다.
    • 기본값 := 1주일
    • 설정할 수 있다.
  • 오프셋은 특정한 파티션에 대해서만 의미가 있다.
    • 파티션 0의 오프셋 3과 파티션 1의 오프셋 3은 다른 데이터이다.
    • 앞의 메시지가 삭제되었어도 오프셋을 재사용할 수 없다.
    • 오프셋은 1씩 증가한다.
  • 데이터가 토픽으로 전송할 때, Key를 제공하지 않으면 그 데이터는 임의의 파티션에 할당된다.
  • Kafka 토픽 안에는 원하는 만큼의 파티션을 가질 수 있다.

'Kafka' 카테고리의 다른 글

[Kafka] Consumer Group & Consumer Offset  (0) 2024.11.12
[Kafka] Consumer & Deserializer  (0) 2024.11.12
[Kafka] Producer & Message Key  (0) 2024.11.12