토픽

토픽은 메시지를 받을 수 있도록 논리적으로 묶은 개념이다. (퍼블리시된 레코드들이 저장되는 카테고리 또는 피드의 이름)

카프카에서의 토픽은 항상 멀티-subscriber다. 즉, 토픽은 0개, 1개, 또는 그 이상의 데이터를 구독하는 컨슈머를 가질 수 있다. 각각의 토픽은 파티션으로 분할되어 관리된다.

토픽내의 레코드(데이터)들은 일정한 보관기간동안만 보관되며 그 이후에는 버려진다. 카프카의 성능은 데이터 크기와 상관 없으므로 보관 기간이 길다고 하여 문제가 되지 않는다.

파티션

파티션은 토픽은 분할한 것이다. 각 파티션의 데이터는 offset 으로 불리는 연속적인 id 번호를 할당받는다. offset은 각 파티션 내에서 고유한 식별값이다.

offset 값은 컨슈머가 제어한다. 일반적으로 컨슈머가 레코드를 읽을때 오프셋을 선형적으로 증가시키지만, 컨슈머가 필요에 의해 원하는 offset 부터 읽을 수도 있다. 이는 offset값을 컨슈머가 제어하기 때문이다.

파티션은 다양한 용도를 제공해준다.

파티션 수에 대하여

토픽의 파티션수가 증가할수록 높은 처리량을 제공할 수 있지만, 무조건 늘리는 것이 답은 아니다. 파티션 증가는 자유롭지만, 파티션 수를 줄이는 방법은 제공하지 않는다.

파티션 수가 증가할수록 아래와 같은 문제가 발생할 수 있다. 따라서 목표 처리량을 기준으로 적정한 파티션 수를 설정해야한다.

파일 핸들러의 낭비

각 파티션은 브로커의 디렉토리와 매핑되고 저장되는 데이터마다 2개의 파일(인덱스와 실제 데이터파일)로 구성된다.