[kafka] 복제(replication)

kafka 2017. 3. 17. 13:42


kafka에 복제(replication) 개념이 있고, 아래 위키에서 잘 설명하고 있다. nosql을 공부하는 사람이라면 충분히 이해할 수 있을 것이다.


동기 복제와 비동기 복제 때문에 ack관련 설정이 있기 때문에 적당히 kafka를 이해할 필요가 있을 것 같다. 



https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Replication





복제 관련 운영 툴은 다음과 같다.


https://cwiki.apache.org/confluence/display/KAFKA/Replication+tools



kafka-preferred-replica-election.sh 


큰 클러스터에서 카프카는 브로커간에 리드 복제본이 균등하게 분산되게 한다. 브로커 종료가 실패하면 분산 기능이 균형을 이루지 못한다. 균등하게 분산하기 위해 카프카에 클러스터의 브로커간에 리드 복제본을 배포한다. 



kafka-preferred-replica-election.sh 툴은 주키퍼 목록을 리드 복제본이 이동되야 하는 토픽 파티션 목록으로 변경한다. 컨트롤러는 기본 복제본이 리더가 아님을 알게 되면 브로커에 기본 복제본을 파티션 리더로 지정하라는 요청을 보낸다. 기본 복제본이 ISR(in-sync replicas) 목록에 없으면 컨트롤러는 데이터를 손실하지 않도록 작업을 실패 처리한다.




$ bin/kafka-preferred-replica-election.sh --zookeeper localhost:12913/kafka --path-to-json-file topicPartitionList.json



topicPartionList.json 파일은 다음과 같다.


{"partitions": [  

    {"topic": "topic", "partition": "0"}, 

    {"topic": "topic", "partition": "1"}, 

    {"topic": "topic", "partition": "2"}, 

    {"topic": "topic2", "partition": "0"}, 

    {"topic": "topic2", "partition": "1"}, 

    {"topic": "topic2", "partition": "2"},  

  ] 




kafka-reassign-partitions.sh을 사용하면 복제본의 파티션 정책을 변경할 수 있다.


$ bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file increase-replication-factor.json --execute 



increase-replication-factor.json 파일은 다음과 같다.

 {"partitions":[{"topic":"smackTopic","partition":0,"replicas":[2,3]}], "version":1 } 






Posted by '김용환'
,