윤개발
Kafka의 Topic(토픽), Partitions(파티션) 본문
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