[카프카 프로그래밍] kafka-configs.sh

kafka-configs.sh는?

  • 토픽의 일부옵션을 설정하기 위한 명령어 min.insync.replicas 옵션을 토픽별로 설정 가능.
    • 원래 describe 했을 때 configs min.insync.replics 설정 아무것도 없던 hello.kafka2 topic
  • bin/kafka-configs.sh --bootstrap-server my_kafka:9092 --alter --add-config min.insync.replicas=2 --topic hello.kafka2

[참고] min.insync.replicas

min.insync.replicas는 ack응답을 보내기 위한 리더가 확인해야할 최소 리플리케이션의 수를 지정하는 브로커 관련 옵션이다.

아무리 메세지 무손실을 위해 acks=all의 옵션을 프로듀서에서 적용을 해 두었더라도 min.insync.replicas가 1로 설정되어 있으면 리더만 메세지를 수신하여도 리플리케이션의 조건이 충족되기 때문에 ack응답을 보내게 된다. 즉 메세지 손실이 일어날 가능성이 있다.

그렇다면 replicaiton factor이랑 min.insync.replicas의 수를 동일하게 설정하면 메세지 손실이 발생하지 않을까? 라는 생각을 하게 될 것이다.여기선 한가지 문제가 있다. 바로 카프카 브로커의 다운이다. 만약 리플리케이션이 3으로 구성되고 min.insync.replicas의 옵션도 3으로 지정해 두었다고 가정할 때 하나의 브로커가 다운되게 되면 가용 가능한 카프카 브로커는 2대이다. 이 상황에서 프로듀서가 메세지를 전송하게 되면 리플리케이션 조건을 충족시킬수 없으므로 에러가 발생하고 클러스터 전체 장애와 비슷한 상황이 나타나게 된다.
카프카에서는 topic replication.facter=3, min.insync.replicas=2를 권장한다.