Inflearn brand logo image

인프런 커뮤니티 질문&답변

나마스테님의 프로필 이미지
나마스테

작성한 질문수

실전에서 바로 써먹는 Kafka 입문

Spring Boot에 Kafka 서버 3대를 연결해서 사용하는 방법

섹션6 43 질문드립니다

작성

·

18

·

수정됨

0

안녕하세요, 강의 잘보고있습니다.

프로듀서나 컨슈머서버 야믈파일에서 3개의 ip를 적고있는데

만약 컨슈머 서버를 2대이상 돌렸을때

기준으로 각 서비스마다 ip를 똑같이 3개 적어야하는건가요? 아니면 1번 서버에서는 리더 노드ip 만
2번 서버에서는 팔로워 파티션 노드 ip 만
이런식으로 나눠서 적용하나요?

또 저런식으로 서버가 나눠져있는경우 순차적으로 메세지 처리는 이전에 강의에서 언급한 하나의 파티션은 단 하나의 컨슈머에만 할당되고 컨슈머는 메세지를 순서대로 처리한다했는데 순서에는 상관이 없는걸까요?

추가로 그다음 섹션보다가 궁금한게
현업에서도 라운드로빈방식을 대부분 사용하나요?

실무기준에서 궁금합니다!

답변 3

0

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요!

질문해주신 내용들에 대해 하나씩 답변드려볼게요~

 

"만약 컨슈머 서버를 2대이상 돌렸을때 기준으로 각 서비스마다 ip를 똑같이 3개 적어야하는건가요?아니면 1번 서버에서는 리더 노드ip만 2번 서버에서는 팔로워 파티션 노드 ip 만 이런식으로 나눠서 적용하나요?"

-> 각 컨슈머 서버마다 동일하게 3개 브로커 IP를 모두 적어주시면 됩니다!

리더/팔로워로 나눠서 적는 게 아니에요~

브로커 목록을 적어주는 이유는 Kafka 클러스터에 접속하기 위한 진입점을 제공하는 거예요!

클라이언트가 처음 접속할 때 이 목록 중 하나라도 살아있으면

전체 클러스터 정보를 받아올 수 있거든요 :)

 

"컨슈머는 메세지를 순서대로 처리한다했는데 순서에는 상관이 없는걸까요?"

-> 컨슈머 서버가 여러 대로 나뉘어져 있어도 순서는 보장됩니다!

말씀하신 대로 "하나의 파티션은 단 하나의 컨슈머에만 할당"되는 원칙이 있어서,

같은 파티션 내에서는 메시지 순서가 보장돼요!

서버가 물리적으로 분산되어 있더라도 파티션 단위로 순서가 관리되기 때문에 문제없어요 !

 

"현업에서도 라운드 로빈 방식을 대부분 사용하나요?"

-> 트래픽의 발생 정도에 따라 다르게 설정을 하는 편인데

트래픽이 많이 발생하는 기업에서는 라운드로빈보다는

보통 파티션 키를 기준으로 한 해시 분산 방식을 더 많이 사용하는 편입니다!

 

이 외로 궁금한 점 더 있으시면 언제든 질문 남겨주세요~~

0

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 나마스테님! 질문 잘 해주셨습니다:)

제가 휴가 중이라 질문을 늦게 확인했네요ㅠㅠ!

가능하다면 오늘 밤 중이나 내일 오전 전까지

질문해주신 내용에 대해 답변 남겨놓겠습니다!!

0

안녕하세요, 인프런 AI 인턴입니다. 나마스테님.

Kafka 클러스터에서 프로듀서와 컨슈머의 설정에 대한 질문 주셨네요. Kafka 환경 설정은 복잡해 보일 수 있지만, 이해하고 난 후에는 유연하게 작동시킬 수 있습니다.

Kafka 브로커 IP 설정

  1. 프로듀서 및 컨슈머 설정:

    • 일반적으로 bootstrap.servers 속성에 클러스터 내 모든 브로커의 IP 주소를 지정합니다. 모든 IP를 지정하는 이유는 어떤 브로커가 리더로 동작하고 있는지 자동으로 파악하여 연결을 관리하는 Kafka의 메커니즘을 활용하기 위해서입니다. 예를 들어, 3개의 IP를 모두 나열합니다.
  2. 컨슈머 로드밸런싱:

    • 컨슈머는 하나의 파티션을 단독으로 소비합니다. 즉, 각 파티션은 한 컨슈머에게 할당되므로 메시지의 순서는 그 파티션 내에서는 보장됩니다. 브로커와 파티션 간의 세부적인 연결은 Kafka가 자동으로 조정합니다.
    • 컨슈머 그룹을 사용하면 여러 컨슈머 인스턴스가 병렬로 메시지를 처리할 수 있지만, 같은 파티션의 메시지를 여러 컨슈머가 동시에 처리하지 않으므로 메시지 순서는 유지됩니다.

실무 적용에서 고려사항

  • 실무에서는 클러스터의 가용성과 장애 조치(failover)를 고려해 모든 브로커의 정보를 각 서비스에 기재하는 게 일반적입니다. 이는 특정 브로커가 다운되더라도 다른 브로커로 빠르게 전환하여 연결을 유지할 수 있는 장점이 있습니다.

  • 순서가 중요한 경우, 같은 키를 가진 메시지는 항상 같은 파티션으로 전송되며, 해당 파티션의 소비자에 의해 순서대로 처리됩니다. 따라서 특정 순서가 중요한 경우 메시지 키 설정에 주의가 필요합니다.

추가적인 Kafka의 설정 및 리더와 팔로워의 균형 잡기에 관한 질문이 있다면, 다음 링크를 참고해 주세요:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

나마스테님의 프로필 이미지
나마스테

작성한 질문수

질문하기