Kafka 訊息不能接收的問題

2021-07-29 11:54:29 字數 2063 閱讀 3353

應用系統上做了乙個操作後,後續操作未執行。 操作之間的銜接是通過kafka訊息來通訊的

可能原因猜測: 1. 消費類掛掉了,沒有監聽? 2. kafka故障?

看下消費類所在的應用,發現有異常掛掉了。

問題在此,重啟解決之。啟動日誌看到消費類正常建立監聽的資訊。

手工推送乙個訊息,還是未收到。

kafka自己啟動了乙個consumer來進行訊息消費

手工推送乙個訊息,沒有消費掉

./kafka-console-consumer.sh --zookeeper 127.0.0.1:2181 --from-beginning --topic data_send_sendcontractgoods_sit
此時懷疑kafka有問題,但不是很確定,因為集群中部署了三個kafka應用,不可能同時出現故障

自己手工建立了乙個test topic,建立、消費訊息,正常

./kafka-console-consumer.sh --zookeeper 192.168.6.33:2181 --from-beginning --topic test_ax
此時比較困惑了,kafka正常 or 異常

此時誤打誤撞,看了下topic的資訊

topic:data_send_sendcontractgoods_sit	partitioncount:1	replicationfactor:1	configs:

topic: data_send_sendcontractgoods_sit partition: 0 leader: -1 replicas: 1 isr:

topic:effective_cost_sit partitioncount:1 replicationfactor:1 configs:

topic: effective_cost_sit partition: 0 leader: 2 replicas: 2 isr: 2

1.broker shutdown的時候,partition的leader在此broker上,controller選主沒有成功,移除此broker後,對應的partition的leader就被賦值成-1了。

2.給此broker傳送stopreplicarequest

呼叫controller.removereplicafromisr,從zk讀取當前partition的狀態,從isr中移除此broker,並更新zk資訊(如果leader為此broker,則新leader被置為-1,代表沒有leader,為什麼沒有選擇isr中其他broker為leader?)

傳送leaderandisrrequest到此partition的leader,傳送updatemetarequest給所有broker

更新replicastatemachine中replicastate的狀態。

比對看了下建立的測試的topic, leader是3,故能正常消費

topic:test_ax	partitioncount:1	replicationfactor:1	configs:

topic: test_ax partition: 0 leader: 3 replicas: 3 isr: 3

將三颱kafka重啟後,通訊正常

問題原因:

公司部署的kafka有三颱機器組成了乙個集群,這個topic只建立了乙個分割槽, 對應分割槽掛掉後,leader變成了-1,無法進行訊息處理? 重啟這台機器後也不行?

據運維同事反應,早上有一台kafka掛掉了,然後重啟了。

待驗證的猜想: kafka集群中,某個topic只有乙個分割槽,對應分割槽機器掛掉後重啟,leader仍無法恢復?

自己本機驗證的時候,建立topic只有乙個分割槽,對應leader的kafka關掉後,訊息傳送異常,leader為-1, 再啟動此kafka,其他的kafka不重啟,訊息可以正常通訊

修改預設topic建立的分割槽數,可以是集群機器的整數倍。

對已有topic調整。 1:重新部署kafka,修改配置。 此時原有訊息內容全部丟失; 2:針對具體topic來修改分割槽數

參考資料

接收kafka訊息

kafka server 127.0.0.1 8081,127.0.0.1 8082,127.0.0.1 8083,127.0.0.1 8084 topics eseal hr test 2 gourp id hthr value string servers value string groupi...

JsonIgnore導致不能接收引數

最近的專案裡有某個屬性需要接收,但不需要返回,於是新增了 jsonignore但隨後發現了bug,這個屬性也不能接收了,查閱資料發現,從2.6版本起 如果想接收則需要新增 jsonproperty 則可實現接收,但不返回的效果 這2個註解直接加在字段上即可,也可以 jsonignore 新增在 ge...

JsonIgnore導致不能接收引數

最近用了jsonignore之後,在寫註冊的時候突然發現這個引數不能接受引數了,於是就檢視了一下資料,從1.9版本起 如果想接收引數的話,則需要新增 jsonproperty 則可實現接收,但不返回的效果 這2個註解直接加在字段上即可,也可以 jsonignore 新增在 getter jsonpr...