kafka服务器死机消息,当kafka集群其中一台宕机后,会怎么样?
一、介紹
我們搭建好kafka集群后,對其進行性能測試。遇到這種場景:我搭建好了三臺kakfa集群,然后停掉其中一臺kafka,然后集群是否能正常工作呢?
kafka集群:
192.168.183.53 節點1
192.168.183.55 節點2
192.168.183.62 節點3
創建的主題是hw_data:
三個分區、三個副本
./kafka-topics.sh --create --zookeeper 192.168.183.53:2181 --topic hw_data --partitions 3 --replication-factor 3 二、問題
三個節點啟動以后,集群正常工作,正常生產、正常消費。
但是當我們停掉其中一個節點后,發現集群不能正常工作了。
三、原因
我的這個問題的兇手是:__consumer_offsets
首先查看系統的_offsets副本是幾個?
./kafka-topics.sh --describe --zookeeper 192.168.183.53|grep consumer_offsets
我們看到 副本數為1,這就是導致我們當一個節點宕機后集群無法正常工作的原因!
__consumer_offsets這個topic是由kafka自動創建的,默認50個,但是都存在一臺kafka服務器上,這是不是就存在很明顯的單點故障?
經測試,如果將存儲consumer_offsets的這臺機器kill掉,所有的消費者都停止消費了。
__consumer_offsets是一個非常重要的topic,我們怎么能允許它只有一個副本呢?這樣就存在單點故障,也就是如果該分區所在的集群宕機了的話,我們的消費者就無法正常消費數據了。
四、解決辦法
1.修改系統_offsets副本數為3
修改kafka的核心配置文件server.properties
將num.partitions參數(默認為1)修改為3,
另外需要添加auto.create.topics.enable=true ,如果沒有對應的topic可以主動創建topic。
由于__consumer_offsets是kafka默認的主題,無法刪除,我們可以刪除zookeeper中的__consumer_offsets。
進入zookeeper/bin目錄執行./zkCli.sh
ls /broksers/topicsrmr /broksers/topics/__consumer_offsetsls /broksers/topics
先將集群停掉
在重新啟動zookeeper和kafka
再次查看__consumer_offsets。發現副本數已經是3
在節點1修改__consumer_offsets后,在節點2和節點3查看__consumer_offsets發現副本數已經變為3,不需要再進行修改。
我的問題到這里就解決了:
啟動kafka集群三個節點,然后停掉其中任意一個節點,集群是可以正常工作的。
2.修改創建的topic的副本數為3
查看創建的topic的副本數是否為1
Bug1 kafka啟動以后沒有添加到zk節點
進入zookeeper的bin目錄,執行./zk.Cli.sh
刪除brokers下的ids
ls /brokers/idsrmr /brokers/ids
重啟kafka,應該就可以了。
Bug2 無法刪除topic
我首先使用rmr /brokers/topics/topicname刪除了zookeeper中的topic ,這樣查看kafka中的topic時,顯示已經沒有了,
但是我又創建我剛剛刪除的主題時,發現他已經顯示被標記刪除。
我的配置文件已經設置了刪除topic為true,但是我刪除的主題還是顯示被標記刪除,沒有真正的刪除
解決辦法:
進入zookeeper的bin目錄,執行./zk.Cli.sh
刪除config、brokers、admin下的對應主題
rmr /config/topics/topicnamermr /brokers/topics/topicnamermr /admin/delete_topics/topicname作者:Liu_Shihao 原文鏈接:https://blog.csdn.net/DreamsArchitects/article/details/108573887
總結
以上是生活随笔為你收集整理的kafka服务器死机消息,当kafka集群其中一台宕机后,会怎么样?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机专业和机电专业的区别,12届计算机
- 下一篇: Linux权限的简单剖析