Inflearn brand logo image

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

diazepam57님의 프로필 이미지
diazepam57

작성한 질문수

Kafka & Spark 활용한 Realtime Datalake

Producer 메커니즘과 성능

kafka 개념 질문

작성

·

61

0

Screenshot 2025-06-19 at 10.07.39 pm.png

안녕하세요, 우선 데이터 관련 좋은 강의 올려주셔 감사합니다.
수강 중 실습에서 AWS kafka 서버가 어떤 역할인지 헷갈려 질문 드립니다.

 

위 강의 pdf와 같이 지금까지 producer가 서버에 push하고 consumer가 서버(브로커)에 있는 메시지를 pull 하는 것으로 이해했고, AWS에 만든 3개의 kafka-broker01~03이 서버를 구성하는 3개의 '브로커'라고 이해했는데,

실습을 진행하면서 AWS kafka-broker서버에서 파티션을 만들었으니 브로커는 맞는 것 같으나 동시에 producer, consumer 역할을 하는 것 같아서 원래 브로커가 서버를 구성하는 동시에 클라이언트의 역할도 하는 것인지 이해하는데 어려움을 겪고 있습니다.

만약 그렇다면 kafka02에서 produce하고 kafka01에서 consume한다고 할 때, kafka02도 kafka01와 같은 cluster에 속하니 kafka02의 파티션에도 메시지가 저장되고 있는 것이 맞나요...?


긴 글 읽어주셔서 감사드립니다.

답변 2

0

김현진님의 프로필 이미지
김현진
지식공유자

안녕하세요 diazepam57님

Kafka에서 브로커 서버라고 하는건 프로듀서를 포함하지 않은, 브로커 서비스가 떠있는 서버를 브로커 서버라고 합니다.

브로커가 떠있는 서버는 원래 브로커 서비스만 유지시키는게 좋습니다. 하지만 실습 환경상 producer 용 서버를 또 띄우기에는 부담되기 때문에 브로커 1번 서에 producer를 올린 셈입니다.

원래는 producer는 브로커가 아닌 다른 서버에서 실행시키는게 더 바람직합니다. 요즘엔 쿠버네티스를 많이 쓰게되면서 프로듀서를 Pod로 구성해서 배포하는 작업도 많이 하게 됩니다.

뿐만 아니라 요즘 나오는 많은 도구들이 kafka로 전송할 수 있는 모듈들이 장착되어 있는 경우가 많습니다. 예를 들어서 DB 에서 실시간 로그를 읽어 복사해줄 수 있는 제품들이 있는데 그 제품에 DB 레코드를 읽어 Kafka로 전송해줄 수 있는 기능들이 포함돼있기도 합니다.

그래서 정리하자면

  1. Producer는 브로커와는 별개의 서비스로 동작하는게 맞고

  2. 브로커 서버와 분리시키는게 좋습니다. (어차피 bootstrap.servers 옵션으로 브로커 서버를 네트워크로 바라볼 수 만 있으면 producer는 어느 위치에 있어도 상관없습니다)

  3. 실습 환경상 비용 절감을 위해 브로커 1번 서버에 producer를 올려두었다 라고 보시면 됩니다.

그리고 마지막 질문

만약 그렇다면 kafka02에서 produce하고 kafka01에서 consume한다고 할 때, kafka02도 kafka01와 같은 cluster에 속하니 kafka02의 파티션에도 메시지가 저장되고 있는 것이 맞나요...?

메시지가 파티션에 저장되는 것은 consume과는 상관없이 producer가 전송한게 브로커에 도착하는 즉시 파티션에 저장됩니다.

kafka02도 kafka01과 같은 클러스터에 속하니 kafka02 파티션에도 메시지가 저장되는 것은 맞지만 이 과정은 consumer가 있든 없든 진행됩니다. (replication.factor 값이 2라고 가정하면 producer의 메시지가 브로커에 도착하는 즉시 2대의 서버에 복사/저장)

 

이해됐을까요?

궁금하신게 있으면 언제든 남겨주세요 ^^

0

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

Kafka의 아키텍처와 역할에 대해 혼동이 있으신 것 같습니다. Kafka는 분산형 메시징 시스템으로, 프로듀서(producer)와 컨슈머(consumer)가 Kafka 브로커를 통해 데이터를 주고받습니다. 주요 구성 요소는 다음과 같습니다:

  1. 프로듀서(Producer): 데이터를 Kafka 브로커에게 전송하여 주제를(topic) 저장소에 기록합니다.
  2. 브로커(Broker): Kafka 클러스터의 여러 서버 중 하나로, 메시지를 저장하고 관리하며, 클라이언트 요청을 처리합니다. AWS Kafka 브로커는 각자 메시지의 일부인 파티션을 저장하도록 설계되어 있습니다.
  3. 컨슈머(Consumer): 브로커로부터 메시지를 가져와 처리할 수 있습니다.

Kafka Architecture

질문에서 언급하신 AWS의 Kafka 서버는 기본적으로 브로커 역할을 수행합니다. 이 브로커들은 클러스터를 구성하고 있으며, 각각의 브로커는 파티션(partition)을 저장합니다. 하나의 클러스터 내에서 브로커들은 데이터를 공유하고 전달하며, 특정 브로커가 주고받은 메시지는 클러스터 내 다른 브로커로도 복제될 수 있습니다.

  • 다만, 브로커는 클라이언트 역할을 하지는 않습니다. 프로듀서 및 컨슈머는 외부 클라이언트로, 데이터의 송수신을 담당합니다.
  • 같은 클러스터 내에서 다른 브로커 간 메시지가 복제되어 고가용성을 지원하므로, kafka02에서 프로듀서 역할을 수행하고 kafka01에서 컨슈머 역할을 수행할 때에도 메시지는 접근 가능합니다. 그러나 이를 위해선 올바르게 설정된 주제와 복제 인자(replication factor)가 필요합니다.

Kafka에 대한 더 깊이 있는 설명이 필요하다면, 유사한 질문에 대한 답변을 참조하시면 좋겠습니다. 추가적인 질문이 있다면, 기꺼이 도와드리겠습니다.

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

diazepam57님의 프로필 이미지
diazepam57

작성한 질문수

질문하기