카프카 서버를 사용하는 서비스에서 메인 서버
와 트래픽 서버
가 각각 2개씩 존재합니다.
메인 서버
에서는 프로듀서를 통해 메시지를 보내고, 트래픽 서버
에서는 컨슈머를 사용해 메시지를 받아 비즈니스 로직을 처리한 후 다시 프로듀서로 결과를 보냅니다.
메인 서버에서는 비동기 처리
로 결과를 받아 클라이언트에게 뷰를 반환합니다.
서버와 토픽의 파티션을 확장한 후에 메시지 처리에 문제가 발생했습니다.
메인 서버1에서 트래픽 서버1로 데이터를 보냈을 때, 결과를 메인 서버1 쪽으로 전달하지 못하는 문제를 파악했습니다.
모든 메인 서버와 트래픽 서버의 컨슈머가 같은 컨슈머 그룹에 속해 있었기 때문에, 파티션 할당이 제대로 이루어지지 않았습니다.
카프카는 컨슈머 그룹 내에서 라운드 로빈 방식으로 파티션을 할당하는데, 이 때 메시지의 키와 파티션 할당 로직이 올바르게 설정되지 않아 잘못된 컨슈머에게 메시지가 전달되는 문제가 발생했습니다.
각 메인 서버의 컨슈머가 서로 다른 컨슈머 그룹에 속하도록 설정을 변경했습니다.
메인 서버1의 컨슈머는 "main-server-apply-consumer-group"에, 메인 서버2의 컨슈머는 "main-server-apply-consumer-group2"에 속하도록 설정을 변경함으로써 각 서버의 컨슈머가 올바른 파티션에 할당되어 메시지를 정확히 처리할 수 있게 되었습니다.
또한 메시지 키와 파티션 할당 로직을 검토하여 올바르게 설정함으로써 앞으로 이러한 문제가 재발하지 않도록 예방했습니다.
컨슈머 그룹을 분리한 후에는 각 메인 서버에서 보낸 메시지의 결과가 올바른 서버의 컨슈머에 의해 처리되었습니다.
이로써 메시지 처리의 정확성이 보장되었고, 클라이언트에게 정확한 뷰를 반환할 수 있게 되었습니다.