• 개인 공부 목적으로 작성한 포스팅입니다.
  • 아래 출처를 참고하여 작성하였습니다. :)

Kafka

Kafka 구조

  • Kafka는 큐를 구현하지 않는 대신 토픽(topic)라고 불리는 카테고리에 데이터 집합을 저장
    • 하나의 토픽은 하나의 파티션 혹은 여러개의 파티션을 가질 수 있음
  • 파티션은 실제로 생성되는 토픽 메세지를 저장하는 물리적 파일
    • 각 파티션은 메세지가 지속적으로 추가되며 데이터 순서가 정해져있고, 내용이 바뀌지 않음.
    • 파티션들은 메세지를 저장하는 물리적 파일로 메세지 추가만 가능한 append-only 속성
  • 하나의 토픽이 여러개의 파티션을 가지고 있다면, round-robin방식을 사용해서 각각 파티션에 메세지를 분배

스크린샷 2022-09-30 오후 8 04 53

Kafka 특징

Pull 방식

  • 파티션이 Consumer에게 메세지를 전달하는 게 아니라, Consumer가 pulling을 통해 데이터를 가져감
  • 컨슈머가 브로커로부터 메시지를 직접 가져가는 PULL 방식
    • 그래서 컨슈머는 자신의 처리 능력만큼만 메시지를 가져와 최적 성능

메시지 보존

  • Consumer의 메세지 소비여부와 상관없이, 미리 정해진 만료시간까지 파티션에 메세지를 보관
  • 따라서 메시지 재사용이 가능하며, Consumer가 과거 메세지를 쉽게 다시 읽을 수 있음.
  • 그러므로 이벤트 소싱이나, 감사 로그와 같은 메커니즘을 구현하기에 적절함.

메시지 순서 보장

  • 같은 토픽 파티션으로 보내진 메세지는 순서대로 처리됨을 보장

대용량의 분산 로그 트래픽 처리에 유리

대용량 스트림 처리에 유리

  • 동시에 들어오는 많은 데이터를 여러개의 파티션에 나누어 저장하기 때문에 병렬로 빠르게 처리할 수 있다.
    • Producer, Consumer 모두에 해당하는 내용

메시지를 파일에 저장

  • 카프카를 재시작해도 메시지 유실 우려가 감소

RabbitMQ

RabbitMQ 구조

  • 발행자(Producer)가 Message Exchange에 메시지를 보냄
  • Queue라고 하는 저장소 버퍼로 메시지를 전달(정해진 규칙에 따라서 큐에 routing)
  • Consumer는 Queue를 Subscribe하여 Queue에 도착하는 최신 데이터를 전달받을 수 있음

스크린샷 2022-09-30 오후 8 04 53

RabbitMQ 특징

Push 방식

  • 메시지 브로커가 컨슈머에게 메시지를 Push 해주는 방식

Message acknowledgements

  • RabbitMQ는 Producer와 Consumer 사이의 Message 전달을 보장하기 위한 기법으로 ACK를 제공
  • ACK 기법은 Message가 최소 한번 이상은 전달되는 것을 보장함.
  • 송신자는 Message를 전송한 이후에 수신자로부터 ACK를 받지 못한다면, 수신자에게 ACK를 받을때까지 반복해서 Message를 전송해야 함.
    • 따라서 Producer는 ACK를 받지 못하면 Message를 재전송 하도록 구현되어 있음.
    • 그래서 수신자는 동일한 Message를 2번이상 받을 수 있음.

스크린샷 2022-09-30 오후 8 04 53

Message priorities

  • RabbitMQ에서는 메시지 우선 순위를 지정하고 우선 순위가 높은 메시지를 먼저 소비할 수 있음

메시지를 메모리에 저장

Kafka와 RabbitMQ 차이점

Kafka와 RabbitMQ가 차이가 생기는 지점을 정리

Message ordering

Kafka

  • 같은 토픽 파티션으로 보내진 메세지는 순서대로 처리됨을 보장
  • 만약 여러개의 파티션 사이에서 순서를 보장하고 싶다면, 키를 이용해서 메세지를 그룹화하여 동일한 키를 가진 메세지동일한 파티션으로 이동하도록 해야함

RabbitMQ

  • Not supported.

Message lifetime

Kafka

  • Kafka는 기본적으로 메시지를 보존하는 로그. 보존 정책을 지정하여 이를 관리할 수 있음.
  • Consumer의 메세지 소비여부와 상관없이, 미리 정해진 만료시간까지 파티션에 메세지를 보관

RabbitMQ

  • RabbitMQ는 대기열 큐이므로 메시지는 한 번 소비되면 사라지고 ACK가 제공됨.

Delivery Guarantees

Kafka

  • 한 번 토픽에 저장된 메시지는 유실되지 않음.

RabbitMQ

  • RabbitMQ는 강력하고 안정적이고 내구성 있는 메시징 보장을 제공
  • 배송 보증은 다음을 통해 달성됨.
    • Message durability - RabbitMQ에 한 번 저장된 메시지를 잃지 않음
    • Message acknowledgements - RabbitMQ와 게시자/구독자(Producer/Consumer) 간의 Signal

Message priorities

Kafka

  • Not supported.

RabbitMQ

  • RabbitMQ에서는 메시지 우선 순위를 지정하고 우선 순위가 높은 메시지를 먼저 소비할 수 있음.

Pull vs Push Approach

Kafka

  • 파티션이 Consumer에게 메세지를 전달하는 게 아니라, Consumer가 pulling을 통해 데이터를 가져감
  • 컨슈머가 브로커로부터 메시지를 직접 가져가는 PULL 방식
    • 그래서 컨슈머는 자신의 처리 능력만큼만 메시지를 가져와 최적 성능

RabbitMQ

  • 메시지 브로커가 컨슈머에게 메시지를 Push 해주는 방식

Kafka, RabbitMQ 장/단점

Kafka 장점

  • 메시지 보존
  • 엄격한 메세지 순서관리
    • 과거 메시지 재생 가능성을 포함하여 장기간 메시지 보존
  • 대용량의 분산 로그 트래픽 처리에 유리
    • 동시에 들어오는 많은 데이터를 여러개의 파티션에 나누어 저장하기 때문에 병렬로 빠르게 처리할 수 있다.

Kafka 단점

  • Consumer에게 메시지 전달 확인 X
    • 실패 후 메시지를 다시 시도해야 하는 책임Consumer에게 있으므로 Producer는 메시지가 Consumer에게 성공적으로 전달되었는지 여부를 신경 쓰지 않음

RabbitMQ 장점

  • RabbitMQ는 Consumer의 확인 메시지가 보장됨(ACK를 제공)
    • 고로 RabbitMQ는 높은 처리량보다는 지정된 수신인에게 원하는 방식으로 메시징을 신뢰성 있게 전달
  • RabbitMQ에서는 메시지 우선 순위를 지정하고 우선 순위가 높은 메시지를 먼저 소비할 수 있음.

RabbitMQ 단점

  • 메시지 보존 X
    • RabbitMQ는 대기열 큐이므로 메시지는 한 번 소비되면 사라지고 ACK가 제공됨.