Kafka 전송은 실패했는데, 왜 주문은 그대로 확정됐나요?

·
루퍼스
TL;DRKafka 전송을 일부러 실패시켜도 주문은 CONFIRMED로 남았습니다. 주문 확정이 rollback되지 않은 이유는 Kafka가 아니라, AFTER_COMMIT Listener 덕분에 DB Commit이 전송보다 먼저 끝났기 때문입니다.Spring 이벤트는 주문 코드에서 Kafka를 분리했고, Kafka는 Record를 프로세스 밖으로 보내 Consumer가 업무를 처리하게 했습니다. 다만 Broker에 기록되지 않으면 Consumer가 처리할 수 없습니다.Kafka에서 send()는 상황에 따라 호출 스레드에서 최대 60초까지 기다릴 수 있습니다. rollback은 피했지만 응답 지연까지 격리한 것은 아니었습니다.Consumer는 구매 활동을 DB에 Commit한 뒤에 ack하고, 실패하면..