問題背景
某環(huán)境執(zhí)行zk升級后跨释,pulsar的生產(chǎn)者報告部分topic發(fā)送消息超時,創(chuàng)建生產(chǎn)者超時减拭,查看pulsar后臺日志發(fā)現(xiàn)無明顯異常,遂猜測可能為元數(shù)據(jù)損壞問題跷车。重啟生產(chǎn)者也未恢復正常棘利。
升級zk的時候,因為未知原因朽缴,導致數(shù)據(jù)部分損壞善玫,體現(xiàn)為/manager-ledgers/{namespace}/{topic}下存在topic數(shù)據(jù),但/admin/partitioned-topics/persistent/{namespace}/{topic}下無數(shù)據(jù)
Pulsar創(chuàng)建partitioned Topic流程
略去權(quán)限檢測的部分密强,假設(shè)tenants和namespace已經(jīng)存在
- 檢查topic是否存在(此流程中檢測/manager-ledgers/{namespace}/下是否存在)
- 創(chuàng)建topic路徑一(/admin/partitioned-topics/persistent/{namespace}/)
- 按照partition個數(shù)在/manager-ledgers/{namespace}下創(chuàng)建節(jié)點
Pulsar檢測partitioned Topic是否存在流程
- 檢查topic是否存在(此流程中檢測/admin/partitioned-topics/persistent/{namespace}/{topic}下是否存在)
Pulsar刪除partitioned Topic流程
- 針對每個partition茅郎,清理/manager-ledgers/{namespace}/下節(jié)點,并關(guān)閉bk相關(guān)資源
- 刪除/admin下topic節(jié)點
問題現(xiàn)象
? 生產(chǎn)者重啟后查詢partitioned-topic是否存在或渤,/admin/partitioned-topics/persistent/{namespace}/{topic}下不存在系冗,然后嘗試創(chuàng)建topic,又因為/manager-ledgers路徑下存在而創(chuàng)建失敗薪鹦,無法自愈
緊急規(guī)避措施
刪除/manager-ledgers路徑下topic信息掌敬,生產(chǎn)者重試創(chuàng)建后自愈,代價:少量bk數(shù)據(jù)殘留
優(yōu)化策略
- 優(yōu)化查詢partitionedTopic查詢邏輯池磁,兩邊判斷奔害,如果有問題,走刪除流程徹底清理znode和bookkeeper數(shù)據(jù)信息
- 考慮添加一致性對比策略地熄,定期檢測是否有partitioned-topic在兩邊znode不一致的問題
- zk升級华临,znode數(shù)據(jù)丟失還在定位修復中