[Kafka]how to change replicate of topic on kafa

目前我使用Kafka manager來管理公司的kafka cluster,但topic無法修改replicate 數量,

這篇紀錄一下如何使用kafka system tools進行修改。

一般replication-factor建議2 or 3,這是指可容許多少server fail,我們目前環境有3 nodes,

但之前有些topic使用了default(1),這時就需要透過kafka-reassign-partitions.bat來修改,指令如下

kafka-reassign-partitions.bat --zookeeper 127.0.01:2182 --reassignment-json-file increase-replication-factor.json --execute

而指定的json內容如下:

--increase-replication-factor.json
{
"partitions":[
    {"topic":"mylogtopic","partition":0,"replicas":[0,1,2]},
    {"topic":"mylogtopic","partition":1,"replicas":[1,2,0]},
    {"topic":"mylogtopic","partition":2,"replicas":[2,0,1]}
    ]
}

 

controlled.shutdown.enable=true

由於kafka cluster 會自動偵測broker是否被shutdown,如果發生就會選出新leader,
同時會sync所有log並實體化到disk(避免重開後需要進行log recovery)。
這可以加快重開後recover的時間。這過程需確定有開啟controlled.shutdown.enable且100% replicated到其他 partition。

 

Balancing leadership

假設發生一個broker fail,該broker的partition會transfer給其他repicas,
當這broker重新上線後,他會成為一個follower,不會再用來接收client read/write需求。
Kafka使用preferred replicas的設計來避免這失調的情況.透過下面command,

手動指定preferred replicas。
kafka-preferred-replica-election.bat --zookeeper 127.0.01:2182 --path-to-json-file topicPartitionList.json

kafka-preferred-replica-election.bat --zookeeper 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183

--topicPartitionList.json

{
 "partitions":
  [
    {"topic": "mylogtopic", "partition": 0},
    {"topic": "mylogtopic", "partition": 1},
    {"topic": "mylogtopic", "partition": 2}
  ]
}

這幾天我在調校broker,producer,consumer相關參數,我個人覺得Apach kafka所提供的預設值對大多數環境提供99%穩定性,

如果你沒有把握且沒有測試過就請維持預設值,

但如果你對這三者要求很高的效能(高吞吐量或低latency),那麼你就得清楚自己在做什麼。

 

參考

Replication tools

Kafka 0.10.2 Documentation