작성
·
17
0
안녕하세요 강사님
지금은 샘플 프로젝트라 하나의 컨슈머 서버에서
파티션3개를 처리하고있는데
만약 email.send topic기준으로 파티션을 5개 생성했을때 컨슈머 서버도 5개를 띄우는게 일반적인가요?
실무기준으로 궁금합니다
추가로 하나의 컨슈머에서 지금은 email.send 토픽만 구독하고있는데 만약 토픽이 slack.send , telegram.send 등 여러가지가 있을경우 컨슈머 어플리케이션에서 카프카리스너를 다중으로 등록하는게 일반적인가요 아니면 각 토픽마다 서비스를 띄우는게 일반적인가요?
만약 각 토픽마다 서비스를 띄운다가정했을때
email.send topic 파티션 5개 => 서비스 5개 구동 필요
slack.send topic 파티션 3개 => 서비스 3개 구동 필요
총 8개가 띄워지는게 일반적인건지 .. 실무기준으로 궁금합니다
답변 1
0
안녕하세요! 질문 잘 해주셨어요 !!
질문해주신 내용에 대해 답변드려 볼게요 !
"파티션을 5개 생성했을때 컨슈머 서버도 5개를 띄우는게 일반적인가요?"
-> 꼭 그렇지는 않아요~ 실무에서는 보통 '처리량'을 기준으로 결정해요 !
컨슈머 1대가 충분히 처리할 수 있다면 굳이 5대를 띄우지 않아요~
보통 파티션 수 >= 컨슈머 수 로 설정하는 편이에요!
파티션보다 컨슈머가 많아도 의미없거든요 ~
예시) 파티션 5개 → 컨슈머 3~5대 정도로 시작해서 처리량 모니터링 후 조정
"실무에서의 여러 토픽을 처리하는 방법"
-> 실무에서는 비즈니스 로직의 유사성과 도메인/운영 포인트에 따라 결정해요 !
대표적인 2가지 방식을 말씀드려볼게요.
[방식 1] 하나의 컨슈머 애플리케이션에서 다중 리스너 활용
리소스가 효율적이고 관리포인트가 작아요 !
하지만 한 토픽에 장애 발생시 다른 토픽도 영향받을 수 있어요 !
[방식2] 토픽별로 별도 서비스 완전 분리
장애 격리, 각 서비스별 독립적 스케일링이 가능해요 !
하지만 운영 복잡도가 증가하고 리소스 오버헤드가 발생해요 !
실무에서는 대부분의 경우 방식 1로 하나의 알림 서비스에서 여러 토픽을 처리하는 방식을 선호해요!
토픽별로 완전히 다른 비즈니스 도메인이라면 서비스를 분리하지만,
알림처럼 유사한 로직이면 통합해서 관리하는 게 일반적이에요 !
다만, 외부 연동/장애 특성이 크게 다르거나 팀이 분리되어 있는 경우에는
방식 2로 운영을 하기도 해요:)
추가로 궁금하신 점 있으시면 또 질문 남겨주세요!