인프런 커뮤니티 질문&답변

코린코린님의 프로필 이미지
코린코린

작성한 질문수

[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!

트랜잭션 프로듀서, 컨슈머

강사님, Idempotence / transaction의 차이가 궁금합니다.

작성

·

258

0

안녕하세요, 강사님!

항상 좋은 강의 잘 듣고 있습니다. 이번에 공부하면서 궁금한 점이 생겨서 질문드리게 되었습니다.

 

Idempotence / transaction의 Producer 관점의 차이는 어떤 것인지 구분할 수 있을까요? 제가 이해한 내용은 다음과 같은데 정확하지 않아서... 질문드리고 싶습니다.

 

Idempotence는 중복 없이 전송하지만, Producer Fail이 발생했을 때의 중복 전송을 막지는 못한다. 예를 들면 다음과 같은 상황으로 이해를 할 수 있을 것 같습니다.

  1. 프로듀서가 브로커에 메세지를 보낸다.

  2. 브로커가 ACK를 보낸다. 이 때 ACK를 받지 못하고프로듀서가 죽는다.

  3. 프로듀서가 다시 살아난다. 이 때 메세지를 보내려고 하면 다시 PID를 배정받는다. 따라서 SEQ Num도 초기화 된다. 이 때 이전에 발송 취소된 메세지부터 보내려고 한다.

  4. 이전에 발송 취소된 메세지를 보내면, PID와 SEQ가 초기화 되기 때문에 브로커 입장에서는 중복메세지가 아니라고 생각하고 저장한다.

 

그런데 트랜잭션으로 하게 되었을 때는 이런 상황을 방지할 수 있을 것 같습니다. 예시는 다음과 같습니다.

  1. 트랜잭션 코디네이터를 통해 TID / PID가 맵핑되고, PID를 에포크 별로 커밋 오프셋을 관리한다.

  1. 각 프로듀서는 고유한 TID를 가지고 있기 때문에 위와 같이 죽고 회복되는 상황에서 고유한 TID를 바탕으로 이전의 PID 값을 받아온다.

  2. 이전의 PID를 에크별로 커밋 오프셋을 관리하기 때문에 여기서 프로듀서는 이전에 발송했던 Message Seq를 받아올 수 있다.

  3. 따라서 프로듀서는 중복없이 정확히 한번 전송을 할 수 있게 된다.

 

이게 맞을까요??

항상 좋은 강의 너무 감사드립니다!

 

 

 

답변 1

0

데브원영 DVWY님의 프로필 이미지
데브원영 DVWY
지식공유자

안녕하세요 답변드립니다.

Idempotence Producer와 프로듀서 애플리케이션이 정상동작하는 한 중복 전송을 막을 수 있다. Transaction Producer는 기본적으로 Idempotence Producer와 동일한 로직으로 운영되지만, 트랜젝션 레코드를 추가로 전송한다. 라고 보시면 될것 같습니다. Transaction Producer를 사용하더라도 장애가 발생하면 중복전송을 피할 수 없습니다.

https://kafka.apache.org/23/javadoc/org/apache/kafka/clients/producer/KafkaProducer.html

From Kafka 0.11, the KafkaProducer supports two additional modes: the idempotent producer and the transactional producer. The idempotent producer strengthens Kafka's delivery semantics from at least once to exactly once delivery. In particular producer retries will no longer introduce duplicates. The transactional producer allows an application to send messages to multiple partitions (and topics!) atomically.

코린코린님의 프로필 이미지
코린코린
질문자

답변 감사드립니다. 그럼 프로듀서 자체만으로는 동일한 로직을 사용하지만, 트랜잭션 프로듀서가 추가된 것은 트랜잭션 컨슈머와 함께 동작하기 위함이라고 이해를 하면 될까요?

데브원영 DVWY님의 프로필 이미지
데브원영 DVWY
지식공유자

여러 레코드를 atomic단위로 처리하기 위해 만든 것이 트랜잭션 프로듀서라고 보시면 됩니다! 내

코린코린님의 프로필 이미지
코린코린

작성한 질문수

질문하기