Tech/Kafka2 Kafka 트랜잭션과 Spring 트랜잭션 시점 차이로 인한 데이터 일관성 문제 들어가며카프카를 사용하면서 카프카 트랜잭션과 스프링 트랜잭션의 시점 차이로 인한 데이터 일관성 문제에 대해 해결한 글을 작성할 예정이다. 이는 결론적으로 트랜잭션과 카프카 이벤트 발행 사이에서 발생하는 정합성 문제이다. 문제 상황발생한 문제의 상황은 트랜잭션 내에서 데이터 변경 후 이벤트를 발행하는 경우, 다른 서비스에서 트랜잭션 커밋 이전의 데이터를 사용할 때이다. 이때 예외가 발생해버리는 것이다. 문제 원인 및 해결트랜잭션이 커밋되기 이전에 카프카 이벤트를 발행하면, 트랜잭션의 실패 여부와 상관없이 이벤트는 발행되도록 구현했던 것이 문제의 원인이었다. 이를 해결하기 위해 TransactionalEventListener를 활용했다. 현재 spring transaction이 후에 kafka 이벤트가 .. Tech/Kafka 2024. 5. 23. [Kafka] 하나의 토픽에 두개의 컨슈머가 구독하면 안되나요? 들어가며개인 프로젝트에서 대규모 데이터 처리를 위해 카프카를 도입했다. MSA를 사용해 서비스를 분리했기 때문에 주문이 들어오면 각 서비스 간에 이벤트를 주고 받게 된다. 주문 취소 기능을 구현하다가 하나의 토픽에 대해 두개의 컨슈머가 구독하여 각 서비스에서 행동을 하도록 구현을 했다. 그러나 하나의 서비스에서만 이벤트를 받아서 동작하였다. 이 문제를 분석하고 해결한 방식에 대해 작성할 예정이다. 문제 발생발생한 문제에 대해서는 이전에 설명한 것과 같다. 다시 간단하게 요약하자면 하나의 토픽을 두개의 컨슈머가 구독한 상황에서 하나의 컨슈머만 이벤트를 처리하고 있다는 것이다.처음에는 파티션이 1개여서 발생한 문제라고 추측을 했다. 그래서 파티션을 2개로 늘려서 다시 시도해봤지만 실패했다.이때 실패한 이유는.. Tech/Kafka 2024. 5. 16. 이전 1 다음 728x90 반응형