Kafka Partition과 Consumer의 관계

민지킴·2021년 6월 2일
0
post-custom-banner

Partition과 Consumer의 개수

Partition은 하나의 Consumer만 접근이 가능합니다.

반대로 Consumer는 여러 개의 Partition을 소비할 수 있죠.

대량의 메시지가 Kafka에 쓰여진다고 가정해보겠습니다.

(1) Partition 1개 / Consumer 인스턴스 1

메시지가 대량으로 막 생산되고 있는데, 처리할 수 있는 Consumer가 1개 밖에 없네요.

그래서 Consumer를 늘리기로 했습니다.

(2) Partition 1개 / Consumer 인스턴스 4개

Consumer를 4개로 늘렸지만, Consumer Group에서 Partition은 하나의 Consumer 밖에 접근을 못하는 구조입니다.

즉, Consumer를 늘리나 마나인 상황이 되었네요.

그래서 이번에는 Partition을 늘려보겠습니다.

(3) Partition 4개 / Consumer 인스턴스 4개

Consumer는 하나의 Partition에 접근할 수 있으므로, Partition과 Consumer는 1:1 구성이 되었습니다.

이상적인 상황이네요.

(4) Partition 4개 / Consumer 인스턴스 3개

잘 운영이 되다가, 갑자기 Consumer 하나가 죽어버렸습니다.

그래도 문제는 없습니다.

Consumer Group에서 offset이 공유되고 있으므로 Consumer가 하나 죽더라도 다른 Consumer가 해당 Partition에 접근하면 되니까요.

(5) Partition 3개 / Consumer 인스턴스 3개

메시지가 잘 처리되고 있고, 상황을 보니 Partition을 3개로 줄여도 될 것 같습니다.

그래서 Partition을 줄이려고 했지만, Partition은 한 번 늘리면 줄일수가 없습니다.

결론

Partition의 개수 >= Consumer 인스턴스의 갯수를 유지하는 것이 좋습니다.

( Consumer > Partition은 불가능합니다. )

하나의 Partition에 하나의 Consumer가 담당하는 것이 좋지만 딱 맞출수는 없으므로, Consumer 수가 모자라도 상관은 없습니다.

주의할 점은 한 번 Partition을 늘리면 다시 줄일 수 없기 때문에, 처리량을 잘 고려하여 Partition과 Consumer의 개수를 선택해야 할 것입니다.

profile
하루하루는 성실하게 인생 전체는 되는대로
post-custom-banner

0개의 댓글