ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kafka] - 14. EOS(Exactly Once Symantics)
    개발/Kafka 2022. 8. 10. 15:07

    Symantics

    1. At-Most-One Semantics ( 최대 한번 전송 )

    Producer Acks=1
    • 확인 시간이 초과되거나 오류가 Response되어도, Producer가 재전송하지 않아 Message가 Kafka Topic에 기록되지 않고, Consumer에 전달되지 않는다.

     

    2. At-Least-Once Semantics ( 최소 한번 전송 )

    Producer ACKS=ALL,-1
    • Producer가 Broker로 부터 ACK를 수신, ALL인 경우에는 Topic에 최소 한번 작성된 것을 의미한다.
    • ACK가 시간 초과나 오류를 Response하면, Message가 기록되지 않는 것으로 판단하여 Message를 Retry 처리한다.
    • 이로 인해 Message가 중복되어 저장 될 수 있다.

     

    3. Exactly-Once Semantics (EOS)

    정확히 한번 전송
    • Producer가 Message 전송을 다시 하더라도 Message는 Conumser에게 한번만 전달해야 한다.
    • Messaging System 자체와 Message를 produce,consume하는 App 간의 협력이 반드시 필요하다.
    • Mesage를 성공적으로 수신 후 Consumer를 이전 Offset으로 되감으면, Offset~최신 Offset까지 Message를 다시 수신하기 때문에

     

    Exactly-Once Semantics(EOS)


    1. 중복 처리 방지

    • Need = Real time Mission Critical Streaming app
    • Client( Idempotent Producer ) 에서 생성 되는 중복 Message를 방지
    • Transaction 기능을 사용하여 하나의 Transaction 내에 모든 Message가 Write 또는 전혀 Write 되지 않도록 (Atomic Message) 
    • 금융 거래 처리 - 송금,카드 결제
    • 과금 정산을 위한 광고 조회 수 Trace
    • Billing Service 간 Message 전송

    2. EOS 지원

    • Java Client에서만 Fully Supported 된다.
    • Producer,Consumer
    • Kafka Connect
    • Kafka Streams Api
    • Confluent Rest Proxy
    • Confluent Ksql DB

    3. Transaction Coordinator 사용

    특별한 Transaction Log를 관리하는 Broker Thread

    일련의 ID 번호(ProducerID, Sequence Number, TransactionID)를 할당하고 Client가 이 Info를 Message Header에 포함하여 Message를 고유하게 식별하는 것이 가능하다.

    Sequence Number는 Broker가 중복된 Message를 처리하지 않도록 해준다.

     

    4. EOS를 사용하기 위한 Parameter

    4-1) Idempotent Producer

    • Producer의 Parameter 중에서 Enable.Idempotence=True 로 설정
    • Producer가 Retries 하여도 중복 방지
    • 성능에 별 영향이 가지 않는다. ( Header에 ID만 추가 된 것임으로 )

    4-2) Transaction

    • 각 Producer에 고유한 transaction.id를 설정
    • Producer는 Transaction Api를 사용하여 개발하여야 한다.
    • Consumer에서는 isolation.level=read_committed 설정하여야 한다.
    • Broker의 ParameterTransaction을 위한 값들은 Default로 설정되어 있음으로 별도로 설정안해도 된다.

     

    5. Idempotent Producer Message 전송 Process

    5-1) Message는 Sequence Number와 고유한 ProducerID를 가지고 있다.

     

    5-2) Broker의 Memory에 Map 정보가 저장

    • map = {producer_id:sequence_number}
    • map은 *.snapshot file로 저장

     

    5-3) Producer가 Ack를 못 받아 Retry 하는 경우

    5-4) Broker는 Check하여 중복 Message를 Response ( Duplicate Response )

    댓글

Designed by Tistory.