Apache Kafka는 분산 스트리밍 플랫폼으로 대용량의 데이터를 빠르고 안정적으로 처리할 수 있는 메시지 브로커 시스템이다. 기본적인 구성 요소는 다음과 같다.
Kafka는 일반적인 메시지 큐 시스템보다 높은 처리량, 내구성, 확정성을 제공하여 마이크로서비스 간의 통신이나 실시간 데이터 처리에 매우 유용하다.
기존의 WebSocket 기반 채팅 시스템에서는 WebSocket 세션 간 직접 메시지를 전달하는 방식으로 구성하는 경우가 많다. 이 경우 다음과 같은 문제점이 발생할 수 있다.
Kafka를 도입하면 메시지를 중간에 Kafka로 보내고 Consumer에서 받아 WebSocket을 통해 다시 전달하는 방식으로 아키텍처가 바뀐다. 이를 통해 다음과 같은 이점을 얻을 수 있다.
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
String senderId = (String) session.getAttributes().get("userId");
String receiverId = (String) session.getAttributes().get("receiverId");
ChatMessageRequestDto requestDto = new ChatMessageRequestDto(message.getPayload());
ChatMessageResponseDto savedMessage = chatMessageService.saveMessage(
Long.parseLong(receiverId),
Long.parseLong(senderId),
requestDto
);
String messageJson = objectMapper.writeValueAsString(savedMessage);
kafkaProducerService.sendMessage(messageJson); // Kafka로 메시지 전송
}