본문 바로가기
IT 지식

Kafka와 RabbitMQ 함께 사용하기: 장점, 구현 방법 및 아키텍처

by elite777 2025. 3. 12.
반응형

Kafka와 RabbitMQ 함께 사용하기: 장점, 구현 방법 및 아키텍처

1. Kafka와 RabbitMQ를 함께 사용할 수 있을까?

네, Kafka와 RabbitMQ를 함께 사용할 수 있습니다. 두 개의 메시지 브로커를 서로 다른 역할로 설정하여 조합하면 더욱 유용한 아키텍처를 구축할 수 있습니다.

2. Kafka vs RabbitMQ – 기본 차이점

항목 Kafka RabbitMQ
아키텍처 분산형 로그 기반 메시징 시스템 메시지 큐 기반 브로커
메시지 처리 방식 Pub/Sub (로그 기반, 소비자가 가져갈 때까지 유지) 메시지 큐 (일반적으로 한 번 소비되면 사라짐)
성능 초당 수백만 건 처리 가능 빠르지만 Kafka보다는 낮음
메시지 보관 기본적으로 로그에 저장 (장기 보관 가능) 기본적으로 메시지를 소비하면 삭제됨
주요 사용 사례 빅데이터 스트리밍, 이벤트 소싱, 로그 처리 비동기 작업, 마이크로서비스 간 통신, 즉시 처리

3. Kafka와 RabbitMQ를 함께 사용하는 시나리오

 

🚀 1. 이벤트 스트리밍 + 단기 메시징 큐 조합

Kafka는 장기 보관 & 스트리밍 처리, RabbitMQ는 빠른 메시지 전달 역할을 담당합니다.

  • Kafka → 로그 기반 데이터 저장, 스트리밍 분석
  • RabbitMQ → 단기 메시지 큐로 사용하여 서비스 간 비동기 통신

예제 아키텍처:

+-------------------+        +-------------------+
|  Kafka Producer  | --->   |       Kafka       |   --->   [데이터 분석 시스템]
+-------------------+        +-------------------+

+-------------------+        +-------------------+        +-------------------+
|  RabbitMQ Pub   | --->   |    RabbitMQ       |  --->  |  소비자 서비스들  |
+-------------------+        +-------------------+        +-------------------+
        
반응형

🚀 2. Kafka에서 데이터를 받아 RabbitMQ로 메시지 전송

 

Kafka가 로그 기반으로 데이터를 유지하기 때문에, 실시간 처리해야 하는 이벤트가 발생하면 RabbitMQ로 전송하여 빠르게 소비할 수 있습니다.

from kafka import KafkaConsumer
import pika

# Kafka Consumer 설정
kafka_consumer = KafkaConsumer('log_topic', bootstrap_servers='kafka-broker:9092')

# RabbitMQ 연결 설정
rabbit_connection = pika.BlockingConnection(pika.ConnectionParameters('rabbitmq-host'))
channel = rabbit_connection.channel()
channel.queue_declare(queue='alert_queue')

# Kafka에서 메시지 수신 후 RabbitMQ로 전달
for message in kafka_consumer:
    channel.basic_publish(exchange='', routing_key='alert_queue', body=message.value.decode('utf-8'))

rabbit_connection.close()
        

🚀 3. RabbitMQ에서 메시지를 받아 Kafka로 스트리밍

RabbitMQ에서 처리된 메시지를 Kafka로 보내면 로그 저장 및 분석이 가능합니다.

import pika
from kafka import KafkaProducer

# Kafka Producer 설정
producer = KafkaProducer(bootstrap_servers='kafka-broker:9092')

# RabbitMQ 연결 설정
rabbit_connection = pika.BlockingConnection(pika.ConnectionParameters('rabbitmq-host'))
channel = rabbit_connection.channel()
channel.queue_declare(queue='process_queue')

# RabbitMQ 메시지 소비 후 Kafka로 전송
def callback(ch, method, properties, body):
    producer.send('processed_topic', value=body)
    print(f"Sent to Kafka: {body}")

channel.basic_consume(queue='process_queue', on_message_callback=callback, auto_ack=True)
channel.start_consuming()
        

4. 결론: Kafka + RabbitMQ 조합은 가능하며, 효과적!

  • Kafka → 로그 기반 메시징 & 빅데이터 분석용 (장기 저장 & 대량 스트리밍 처리)
  • RabbitMQ → 빠른 메시지 큐 & 마이크로서비스 간 비동기 통신
  • Kafka와 RabbitMQ를 연결하면 실시간 처리 & 장기 데이터 보관을 모두 해결 가능

즉, 두 시스템을 함께 사용하면 실시간 메시지 처리와 장기 데이터 보관을 동시에 해결할 수 있습니다!

반응형