024-08-27T17:41:04.980+09:00 ERROR 17860 --- [rsaga.netty-core] [ntLoopGroup-0-3] .m.a.p.i.ExactlyOnceKafkaMessageProducer : Transaction id create-reservation-transaction is aborted, Exception thrown : Cannot attempt operation `beginTransaction` because the previous call to `commitTransaction` timed out and must be retried
2024-08-27T17:41:04.980+09:00 INFO 17860 --- [rsaga.netty-core] [ntLoopGroup-0-3] o.a.k.clients.producer.KafkaProducer : [Producer clientId=producer-create-reservation-transaction, transactionalId=create-reservation-transaction] Aborting incomplete transaction
2024-08-27T17:41:04.980+09:00 WARN 17860 --- [rsaga.netty-core] [ntLoopGroup-0-3] i.netty.util.concurrent.DefaultPromise : An exception was thrown by org.server.rsaga.saga.promise.impl.SagaPromiseAggregator$$Lambda$2246/0x0000019141cd0400.operationComplete()
java.lang.IllegalStateException: Cannot attempt operation `abortTransaction` because the previous call to `commitTransaction` timed out and must be retried
at org.apache.kafka.clients.producer.internals.TransactionManager.handleCachedTransactionRequestResult(TransactionManager.java:1138) ~[kafka-clients-3.7.0.jar:na]
at org.apache.kafka.clients.producer.internals.TransactionManager.beginAbort(TransactionManager.java:323) ~[kafka-clients-3.7.0.jar:na]
at org.apache.kafka.clients.producer.KafkaProducer.abortTransaction(KafkaProducer.java:837) ~[kafka-clients-3.7.0.jar:na]
at org.server.rsaga.messaging.adapter.producer.impl.ExactlyOnceKafkaMessageProducer.produce(ExactlyOnceKafkaMessageProducer.java:52) ~[classes/:na]
.....
Cannot attempt operation beginTransaction because the previous call to commitTransaction timed out and must be retried 으로 인해 ExactlyOnceKafkaMessageProducer 에서 문제가 발생한다.
사용 환경
현재 환경 문제점
사가 코디네이터는 하나의 요청마다 단일 프로듀서를 통해 여러 토픽에 ExactlyOnce 방식으로 메시지를 발행한다. 그러나 여러 요청이 들어오면 카프카 트랜잭션 코디네이터를 통해 복잡한 작업이 여러 번 진행되며, 이 과정에서 트랜잭션이 중단되거나 commitTransaction 호출이 타임아웃되어 재시도해야 하는 문제가 발생한다.
해결 방법
해결 방법 1. 각 토픽 프로듀서 AtLeastOnce 변경, 메시지 모아서 발행
해결 방법 1 결과.
[x] 각 토픽마다 프로듀서를 할당하고 데이터를 모아서 발행한다.
개선, 데이터 정합성 이상 없음 하지만 여전히 초당 메시지 발행 수가 매우 낮다. 다른곳에서 병목 현상이 발생한다.
버그 설명
카프카 트랜잭션 타임아웃
1. 토픽에 들어가는 바이트
생산되는 메시지의 수가 현저히 낮다.
2. ExactlyOnceKafkaMessageProducer 문제 발생 로그
Cannot attempt operation
beginTransaction
because the previous call tocommitTransaction
timed out and must be retried 으로 인해 ExactlyOnceKafkaMessageProducer 에서 문제가 발생한다.사용 환경
현재 환경 문제점
해결 방법
해결 방법 1. 각 토픽 프로듀서 AtLeastOnce 변경, 메시지 모아서 발행
해결 방법 1 결과.
다른곳에서 병목 현상
이 발생한다.스크린샷
추가적인 정보