inflearn logo
강의

Khóa học

Chia sẻ kiến thức

[Lập trình ứng dụng Apache Kafka] Từ ý tưởng đến người tiêu dùng, nhà sản xuất, kết nối và truyền phát!

Nhà sản xuất giao dịch, người tiêu dùng

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

367

silverprize3290

53 câu hỏi đã được viết

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. 따라서 프로듀서는 중복없이 정확히 한번 전송을 할 수 있게 된다.

 

이게 맞을까요??

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

 

 

 

Kafka 데이터 엔지니어링

Câu trả lời 1

0

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.

0

silverprize3290

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

0

dvwy

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

카프카 ISR 개념 부분 질문

0

479

1

카프카 커넥터를 두가지 사용하는 이유

0

896

1

브로커, 토픽, 파티션관계

0

674

1

커넥트(소스), 커넥트(싱크)

1

531

1

카프카 isr 질문 있어요

0

325

1

파티션 질문 있어요

0

385

1

명령어 관련 문의드립니다.

0

422

2

토픽의 레코드가 라운드로빈으로 배정되는 방식 질문있습니다.

0

421

2

레코드에 json 형태의 데이터 넣는법 질문

0

427

2

카프카 도커로 실행

1

436

1

CCDAK 질문입니다!

0

1344

1

스트림즈 조인에 관련해서 질문드립니다.

0

299

1

min.insync.replicas에서 설정값만큼의 브로커 다운시

0

252

1

브로커로 메시지를 보낼때 null값인 경우

0

461

1

zookeeper 실행시 에러

1

781

1

온프레미스 환경 설치에 대해 질문있습니다.

0

347

1

리밸런싱 시, 메시지 중복 처리 문제

0

1058

1

브로커 장애 발생시 질문

0

329

1

에러 핸들링과 관련하여 질문 드립니다

0

308

1

토픽 생성시 파티션이 배치되는 방법

0

351

1

질문있습니다!

0

133

1

카프카 스트림즈 에러 핸들링 질문 드립니다

0

391

1

카프카 클러스터 질문이 있습니다.

0

176

1

현재 kafka stable 버전이 3.3.1이라고 되어 있습니다.

0

411

1