Partition은 하나의 Consumer만 접근이 가능합니다.
반대로 Consumer는 여러 개의 Partition을 소비할 수 있죠.
대량의 메시지가 Kafka에 쓰여진다고 가정해보겠습니다.
메시지가 대량으로 막 생산되고 있는데, 처리할 수 있는 Consumer가 1개 밖에 없네요.
그래서 Consumer를 늘리기로 했습니다.
Consumer를 4개로 늘렸지만, Consumer Group에서 Partition은 하나의 Consumer 밖에 접근을 못하는 구조입니다.
즉, Consumer를 늘리나 마나인 상황이 되었네요.
그래서 이번에는 Partition을 늘려보겠습니다.
Consumer는 하나의 Partition에 접근할 수 있으므로, Partition과 Consumer는 1:1 구성이 되었습니다.
이상적인 상황이네요.
잘 운영이 되다가, 갑자기 Consumer 하나가 죽어버렸습니다.
그래도 문제는 없습니다.
Consumer Group에서 offset이 공유되고 있으므로 Consumer가 하나 죽더라도 다른 Consumer가 해당 Partition에 접근하면 되니까요.
메시지가 잘 처리되고 있고, 상황을 보니 Partition을 3개로 줄여도 될 것 같습니다.
그래서 Partition을 줄이려고 했지만, Partition은 한 번 늘리면 줄일수가 없습니다.
Partition의 개수 >= Consumer 인스턴스의 갯수를 유지하는 것이 좋습니다.
( Consumer > Partition은 불가능합니다. )
하나의 Partition에 하나의 Consumer가 담당하는 것이 좋지만 딱 맞출수는 없으므로, Consumer 수가 모자라도 상관은 없습니다.
주의할 점은 한 번 Partition을 늘리면 다시 줄일 수 없기 때문에, 처리량을 잘 고려하여 Partition과 Consumer의 개수를 선택해야 할 것입니다.