-
[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의 Parameter는 Transaction을 위한 값들은 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 )
'개발 > Kafka' 카테고리의 다른 글
[Kafka] - 17. Docker-compose Kafka 개발환경 구축 및 테스트 (0) 2022.08.11 [Kafka] - 15. EOS Transaction (0) 2022.08.10 [Kafka] - 13. Kafka Log File (0) 2022.08.10 [Kafka] - 12. Cooperative Sticky Assignor (0) 2022.08.09 [Kafka] 11. Parition Assignment Strategy (0) 2022.08.09