目前我使用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),那麼你就得清楚自己在做什麼。
參考