저는 국내 메신저 회사에서 우연한 기회로 전사 공용 카프카를 운영하고 있습니다. 현재 기준으로 제가 관리하는 카프카 클러스터는 용도와 종류에 따라 5종류로 구분되고, 전체 서버는 약 50여대 됩니다. 이 수치는 지금도 계속 증가하고 있어 나중에는 더 늘어날 것 같습니다.
제가 글을 적는 이유는 카프카에 대해서 스터디하고 운영하면서 겪었던 일들중에서, 쉽게 이해가 되지 않거나 고민을 했던 부분 그리고 일반적인 검색으로 쉽게 접할 수 없는 내용들을 이해하기 쉽게 공유하려고 합니다.
이번 글에서는 연재의 첫부분으로 Quickstart를 보면서, 제가 이런 내용은 추가해주면 좋을 것 같다고 느낀 부분과 파티션 수에 따른 메시지 순서에 대해서 그림과 같이 알아보겠습니다.
카프카에 대해서 처음 접하시는 분들도 계실거 같아서, 간단하게 기본 개념에 대해서 설명하겠습니다. 카프카는 비동기 처리를 위한 메시징 큐의 한 종류이며, 프로듀서와 컨슈머가 있습니다. 대표적인 비동기 메시징 시스템인 메일과 비교하면 이해가 쉽게 될 것 같습니다.

우리가 잘 알고 있는 메일의 경우 보내는 사람은 받는 사람과 상관 없이 메일 서버로 메시지를 보낼 수 있습니다. 보낸 메시지는 메일서버에 저장되어 있고, 받는 사람은 자기가 원하는 시간에 언제든지 메일을 볼 수 있게 됩니다.
카프카도 비슷합니다. 프로듀서는 카프카로 메시지를 보내게 되고, 해당 메시지는 카프카에 저장되어 보관중입니다. 그리고 컨슈머는 카프카에 저장되어 있는 메시지를 필요로 할때, 가져갈 수 있습니다.
기본 개념에서 알았으니, 이제 Quickstart를 통해서 카프카에 대해서 살펴보면서, 따라해보겠습니다.
아마 많은 분들이 처음으로 카프카를 접하게 되면, 카프카? 그게 뭐지? 라고 생각하시면서 카프카 홈페이지를 방문을 하실거 같고, 도큐먼트를 읽어보실 것 같습니다. 도큐먼트가 아무래도 영문으로 길게 적혀 있기때문에, "역시 난 실전이지" 라는 생각으로 Quickstart를 보시고, 순서대로 따라해보실것 같습니다. 저 역시 마찬가지입니다.
Quickstart를 보면서 제가 개인적으로 추가했으면 하는 내용들을 추가하면서 설명하겠습니다. 카프카 설치하기나 config부분은 많은 자료들이 있으니 여기서는 자세히 적지 않겠습니다. 만약 나중에 필요하다고 생각되면 따로 한번 정리하겠습니다.
Document에 있는 Quickstart에서는 서버를 몇대를 어떻게 준비해야 하는 내용도 없어 전 Quickstart를 따라하기 어려웠습니다. 저는 카프카의 간단한 테스트 환경을 위해서 최소 3대가 필요하다고 생각합니다. 테스트 환경이므로, 주키퍼와 카프카를 동일한 서버로 구성해도 괜찮습니다.
주키퍼는 카프카의 노드 관리를 해주고, 토픽의 offset 정보등을 저장하기 위해 필요합니다. 주키퍼는 과반수 투표방식으로 결정하기 때문에 홀수로 구성해야 하고, 과반수 이상 살아 있으면 정상으로 동작합니다.
ex) 주키퍼 3대일 경우 2대 이상, 주피커 5대일 경우 3대 이상
카프카는 과반수 투표방식을 사용하지 않지만, Replication Factor를 3으로 할 경우 균일하게 스프레드하기 위해서 노드 수 3이 최소라고 생각합니다. (__consumer_offsets 토픽은 기본값이 RF3)