윤개발

Kafka의 Topic(토픽), Partitions(파티션) 본문

백엔드/kafka

Kafka의 Topic(토픽), Partitions(파티션)

DEV_SJ 2021. 1. 28. 14:56

Kafka의 기본이 되는 토픽과 파티션에 대해서 알아보자.

Topic (토픽)

전송되는 데이터 스트림을 토픽이라 한다. 토픽은 로그가 될수도 있고 어떠한 데이터도 될 수 있다.

그림에서는 hello 라는 이름의 토픽을 가지고 있다.

  • 데이터베이스의 테이블과 유사하며 제약이 없다.
  • 원하는 만큼 많은 토픽을 생성할 수 있다. (hello_1, hello_2, hello_3 ...)
  • 각 토픽은 이름을 통해 구분된다.

Partitions (파티션)

하나의 토픽은 여러개의 파티션으로 구분된다. 그림에서 hello 토픽은 3개의 파티션으로 나뉘게 된다.

  • 파티션은 0 부터 증가하는 id로 구별되며 파티션0, 파티션1, 파티션2은 모두 다른 파티션이다.
  • 각각의 파티션에는 전송된 데이터가 저장이 된다.
  • 데이터가 기록되면 변경할 수 없다. (불변성)
  • 특정 파티션에 key값을 지정하지 않는 경우 랜덤한 파티션에 데이터가 저장되게 된다.
  • 저장된 데이터도 0 부터 증가하여 자신만의 id를 가지게 되는데 이를 offset이라 부른다.
  • offset은 0으로 돌아가지 않으며 새로운 메시지는 이후에 저장된다.

모든 파티션이 다르기 때문에 offset이 같아도 안의 데이터는 다르다.

그림과 같이 topic이름 -> 파티션id -> offset id를 통해 데이터를 식별할 수 있다.

 

여러개의 파티션을 사용하는 이유는 무엇일까?

하나의 파티션을 사용하게 되면 4개의 메시지를 순차적으로 받아 처리하게 되고 시간이 증가한다.

여러개의 파티션을 사용한다면 병렬처리를 통해 빠르게 처리할 수 있다.

 

그렇다면 여러개의 파티션을 사용하는 것이 무조건 좋을까? 

일단 파티션이 생성되면 파티션의 개수를 줄일 수 없다.

또한 각 파티션들은 복제되기 때문에 파티션의 수가 많을 수록 더많은 용량을 차지한다. 적당한 수의 파티션을 지정하는 것이 좋다.

또 순서가 중요한 데이터의 경우에 병렬처리 하게 되면 각 데이터의 순서를 구별하는 방식이 추가로 필요할 수 있다.

 

 

카프카의 기본이 되는 토픽, 파티션, offset을 알아보았다. 다음 포스팅에는 브로커에 대해 알아보자.

 

'백엔드 > kafka' 카테고리의 다른 글

5분만에 Apache Kafka 알아보기  (0) 2021.01.28
Comments