작성
·
228
·
수정됨
0
특정 토픽에 대한 파티션을 3개를 만든 후 소스에서 컨슈머 그룹에 대한 컨슈머를 3개를 만들었습니다.
운영 환경에서 실행중인 서버가 1개인데 CPU 사용량으로 인한 오토스케일링이 발생하여 서버가 2개가 되었을 때, 그럼 총 6개의 컨슈머가 생성되는 것이라고 생각됩니다.
그럼 3개의 컨슈머는 idle 상태로 놀고 있는게 아닌가 싶습니다.
제가 이해한게 맞을까요?
실제 운영 환경에서 이런 경우는 어떻게 하는게 좋은 방법일지 궁금합니다.
---------------
멀티스레드 컨슈머 애플리케이션
강의를 들었습니다.
그렇다면 강사님께서는 토픽 + 컨슈머 그룹 + 컨슈머 별로 각각의 프로세스를 실행시키나요?
다른 강의에서 파티션의 개수를 충분히 많은 개수 50~100개를 권장하셨는데.. 그럼 프로세스가 너무 많이 떠있는거라 생각되서요..
강의 예로는 아래와 같이 컨슈머가 있다면, 총 7개의 프로세스에 단일 쓰레드로 실행시키는 걸까요?
ex)
A-TOPIC
A-TOPIC-GROUP-1
A-TOPIC-GROUP-1-CONSUMER-1
A-TOPIC-GROUP-1-CONSUMER-2
A-TOPIC-GROUP-2
A-TOPIC-GROUP-2-CONSUMER-1
A-TOPIC-GROUP-2-CONSUMER-2
A-TOPIC-GROUP-2-CONSUMER-3
B-TOPIC
B-TOPIC-GROUP-1
B-TOPIC-GROUP-1-CONSUMER-1
B-TOPIC-GROUP-1-CONSUMER-2
답변 1
0
파티션이 3개인 토픽에 대응한 컨슈머를 3개 만들어서 운영할 경우, 1:1로 파티션과 컨슈머가 할당됩니다. 그러므로 오토스케일링으로 인해 컨슈머가 6개가 되면, 할당되지 못한 컨슈머 3개가 idle 상태로 남겨지게 됩니다.
실제 운영 환경에서는 컨슈머를 오토스케일링에 넣기 보다는 컨슈머 랙, 컨슈머 데이터 처리량을 모니터링 하면서 지정한 서버 개수만큼을 적정수로 유지하면서 운영하는 것이 좋아보입니다. 그러면서 파티션 개수를 컨슈머 개수를 동일하게 유지하면서 필요에 따라 함께 늘리는 것이 좋을 것 같습니다.
상황에 따라 다르겠지만, 개인적인 경험으로는 말씀대로 토픽 + 컨슈머 그룹 + 컨슈머
별로 따로 프로세스를 실행시키는 것이 운영하는데 편리했습니다. 파티션 개수가 많고 프로세스가 많이 떠있다는 뜻은 그만큼 데이터 처리량을 늘려야 한다는 것이므로, 프로세스가 많이 실행되는 것에 대한 어려움은 없었습니다. 오히려 프로세스에 n개 스레드의 컨슈머들을 운영하는 것이 장애 대응에 어려움이 많기 때문입니다.
A-TOPIC
A-TOPIC-GROUP-1
A-TOPIC-GROUP-1-CONSUMER-1
A-TOPIC-GROUP-1-CONSUMER-2
A-TOPIC-GROUP-2
A-TOPIC-GROUP-2-CONSUMER-1
A-TOPIC-GROUP-2-CONSUMER-2
A-TOPIC-GROUP-2-CONSUMER-3
B-TOPIC
B-TOPIC-GROUP-1
B-TOPIC-GROUP-1-CONSUMER-1
B-TOPIC-GROUP-1-CONSUMER-2
그러므로 상기와 같은 상황이 있다면, 프로세스를 7개를 따로 실행시킬 것 같습니다.
그렇군요~!
실제 운영 환경에서 카프카를 사용해보지 않아 n개의 스레드의 컨슈머들을 운영하는 것이 장애 대응이에 어떤 어려움이 있는지를 몰라서 아직까지는 컨슈머당 프로세스 1개를 띄우는게 와닿지는 않습니다!
이부분은 제가 실무에서 사용해보면서 느껴봐야 할 것 같네요!
감사합니다!