관리 메뉴

IT.FARMER

kafka ack mode 란? 본문

MessageQueue/Kafka

kafka ack mode 란?

아이티.파머 2023. 6. 8. 20:32
반응형

kafka ack mode 란?

카프카에는 ack 모드라는것이 있다. acknowledgment의 약어이다. (어렵다..) 이 ack 모드는 메세지를 성공적으로 처리했는지 kafka 에게 알리는 방식을 말한다. 방식에는 다음과 같이 세가지 방식이 있다. ack=0, ack=1, ack=all

이 모드들은 메세지의 송수신방식에 대한 설정이다. kafka는 메세지의 송신과 수신을 보장하기 위해 Producer 가 메세지를 송신할때 Broker가 메세지를 수신하고, Consumer가 Broker 에서 메세지를 수신할때까지 기다리는 방식을 사용한다.

쉽게 말해 ack mode란 ?

Producer가 kafka의 broker 로 메세지를 보내게 되는데, producer 가 보낸 메세지를 kafka가 잘 받았는가? 에 대하여 확인을 할것인지 아닌지에 대한 결정이다.

ACK Mode의 종류는 다음과 같다.

  • ack=0 Producer 는 메세지를 보내는 즉시 성공으로 간주한다. 이 모드에서는 리더(Leader)에게 메세지를 전달하고 나서 성공으로 처리하며, 팔로워에게 메세지가 복제되지 않았거나 리더가 실패한 경우엔 메세지가 손실될수 있다. 즉 리더 파티션(Reader partition)으로데이터만 보내고 성공으로 간주한다는 것이다. 이는 다른 follower partition 으로 잘 복제가 되었는지도 보장 할 수 없다. 허나 속도는 빠르다.
    • 예를들어 ack=0 으로 설정하고 partition:3, replicaset:3 으로 설정하여도 해당 ack 모드에서는 데이터를 leader partition으로 정확하게 보냈는지 , 다른 브로커의 파티션으로 복제했는지에대해서 보장하지 않는다는 것이다.
  • ack=1 Producer 는 메세지를 보내고 리더에게 메세지를 전달하고난뒤 응답값을 받아 정상적으로 전달되었는지 알수있다. 허나 마찬가지로 follwoer partition 에는 정상적으로 복제가 되었는지 알수 없다. 이또한 데이터 유실 위험은 있다.
  • ack=all 이것은 ack=1 옵션에 추가하여 follower partition 에도 복제가 잘이루어 졌는지 까지 확인하는 절차를 거치는 옵션이고 데이터유실이 없는 안정적인 옵션이라 볼수있다. 허나 복제가 되는 시간이 있음으로 속도는 느리다.

앞서 보았던 브로커, 파티션과 리플리카셋을 참고해보자. 브로커? 파티션과, 리플리케이션, ISR 이란? 의글을 참고해 보면 ack=0 인경우엔 리플리케 셋과 연관이 없다고 봐야 하고(복제도 없고, 보냈는지 안보냈는지 확인하지도 않기 때문이다.), ack 모드가 1이상인경우에만 리플리카셋과 연관이 있다. 이유는 ack 모드에 따라 동작하는 방식이 다르기 때문이다.

ack 모드와 ISR , replication 관계에 대한 설명은 해당페이지를 참고한다.

kafka patitioning 과 replication, ack ISR 의 관계

 
반응형