• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    미해결

한 서버에서 producer와 consumer를 같이 구축해도 될까요?

23.12.06 20:48 작성 조회수 266

0

안녕하세요.

 

  1. 한 서버에서 producer와 consumer를 같이 구축하게 된다면, 생길 수 있는 문제가 있을까요?

  2. 혹시 현업에서 producer와 consumer를 같이 구축하는 경우가 많은지 아니면 보통 분리해서 사용하는지 궁금합니다.

  3. 만약 consumer 서버를 스케일아웃해서 3대로 운영한다면, consumer 서버에서 구독하는 모든 토픽들의 컨슈머 수가 3배가 되는게 맞을까요?

  • 예를 들어 A, B, C 토픽을 "가consumer"서버에서 구독하고 있을때 가consumer"서버가 3대가 된다면 토픽 A <- 컨슈머 3개 / 토픽 B <- 컨슈머 3개 / 토픽 C <- 컨슈머 3개가 되는것인지, 따로 설정해서 토픽마다 컨슈머의 수를 다르게 가져갈 수 있는 것인지 궁금합니다.

 

강의 잘 듣고 있습니다!

감사합니다 :)

답변 2

·

답변을 작성해보세요.

2

안녕하세요

한 서버에 프로듀서와 컨슈머 둘다 운영하는 경우도 있습니다. 다만, 이렇게 통합해서 운영할 경우 컨슈머의 장애 대응이 쉽지 않아서 일반적인 케이스에는 분리하여 운영하는 것이 좋을것 같습니다. 저 같은 경우에도 많은 부분 분리해서 운영하는 것을 선호합니다.

 

그리고 컨슈머 서버의 애플리케이션의 스케일아웃에 대응하는 토픽 - 컨슈머의 할당은 파티션 개수와 컨슈머 할당 전략(Consumer assignor strategy)에 따라 다릅니다. 그러므로 각 토픽의 파티션 개수와 컨슈머 할당 전략이 어떻게 되어 있는지 확인하시는 것이 중요합니다.

감사하빈다!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.08

안녕하세요, 인프런 AI 인턴입니다.

  1. 한 서버에서 프로듀서와 컨슈머를 같이 구축하는 경우, 서로의 리소스(메모리, CPU 등)를 경쟁하게 되며, 서버 장애 발생 시 프로듀서와 컨슈머 모두에 영향을 줄 수 있습니다. 백그라운드 작업 또는 가용성이 중요한 경우 분리하는 것을 고려할 수 있습니다.

  2. 현업에서는 프로듀서와 컨슈머를 분리하여 운영하는 경우가 많습니다. 이는 구조적인 격리를 통해 유연성, 확장성 및 유지보수성을 향상하기 위한 선택입니다. 하지만, 작은 규모의 애플리케이션나 리소스가 제한적인 환경에서는 같은 서버에서 운영하는 경우도 있습니다.

  3. 컨슈머 서버를 스케일아웃하여 3대로 운영하는 경우, 각 서버의 컨슈머 인스턴스가 같은 컨슈머 그룹에 속하면 전체 토픽에 대한 컨슈머 수는 고정되고 파티션 별로 할당됩니다. 따라서, 각 토픽마다 컨슈머 수가 3배로 증가하는 것은 아닙니다. 스프링 부트에서 Kafka를 설정하는 방법에 대한 예시는 다음과 같습니다:

spring.kafka.consumer.group-id=myGroup

컨슈머 그룹 설정을 통해 여러 인스턴스가 동일한 그룹에 속하도록 할 수 있으며, 이 경우 Kafka는 파티션을 그룹 내 컨슈머 인스턴스 간에 공평하게 분배합니다. 만약 각 토픽별로 다른 컨슈머 수를 원한다면, 각기 다른 컨슈머 그룹을 설정하고 그룹별로 인스턴스를 할당하는 방식을 선택할 수 있습니다.

이와 관련해서 추가적인 정보가 필요하시다면, 스프링 부트의 Kafka 지원 문서를 참고하시면 도움이 될 것입니다:
- Spring Boot Apache Kafka Support
- Spring Boot Kafka Streams
- Spring Boot Additional Kafka Properties

학습에 도움이 되시길 바랍니다. 좋은 강의 들으시길 바라며, 추가적인 질문이 있으시면 언제든 문의해 주세요!

감사합니다, 시골쥐님.