카프카는 실질적으론 메세지 브로커의 역할을 합니다. 이전 포스팅에서 이야기했던 pub/sub 구조를 기본으로 하여 프로듀서(pub)는 특정 토픽에 대한 메세지를 발행하며, 컨슈머(sub)는 본인이 구독한 토픽의 메세지를 받습니다.
카프카의 메세지는 키와 값으로 구성되어있습니다.
키는 프로듀서 내부의 파티셔너가 키의 값을 이용하여 브로커 내의 저장위치를 결정하는데 사용됩니다. 값은 메세지가 전달하고자 하는 데이터 내용을 포함합니다.
이때 메세지 전체가 직렬화/역직렬화 과정을 거치므로 내부에 있는 데이터의 타입은 크게 영향을 주지 않습니다.
토픽은 메세지를 구분하는 논리적인 단위입니다.일종의 구분자정도로 생각하면 좋을 것 같습니다.
파티션은 브로커 내의 물리적인 단위입니다.
단어 그대로 토픽의 저장공간을 쪼개주는 것으로 생각하시면 됩니다.
파티션 내의 한칸은 로그라고 부르며, 로그 하나에 데이터가 순차적으로 추가됩니다. 그리고 이 로그의 위치는 오프셋(상대위치)으로 나타냅니다.
파티션은 주로 여러개를 두는데, 이렇게 토픽을 여러개의 파티션으로 나누면
많은 메세지가 동시에 들이닥쳐도 각 파티션이 메세지를 추가하기때문에 병렬적인 처리가 가능해집니다. 다만 하나의 파티션 내에서는 메세지가 순차적이지만, 파티션끼리는 순서가 보장되지 않으므로 순서가 중요하다면 사용을 좀더 고려해보시는 것이 좋겠습니다.
카프카는 파티션의 복제를 지원합니다.
하나의 파티션에는 1개의 리터레플리카 + 여러개의 팔로워 레플리카로 이루어집니다. 리더에서는 전반적인 읽기/쓰기를 담당하고, 팔로워에서는 복제 및 리더에게 장애가 발생할 경우 이를 승계하여 장애로 인한 피해를 예방합니다.