Znode数据丢失导致pulsar元数据不一致问题复盘

问题背景

某环境执行zk升级后,pulsar的生产者报告部分topic发送消息超时,创建生产者超时,查看pulsar后台日志发现无明显异常,遂猜测可能为元数据损坏问题。重启生产者也未恢复正常。

升级zk的时候,因为未知原因,导致数据部分损坏,体现为/manager-ledgers/{namespace}/{topic}下存在topic数据,但/admin/partitioned-topics/persistent/{namespace}/{topic}下无数据

Pulsar创建partitioned Topic流程

略去权限检测的部分,假设tenants和namespace已经存在

  • 检查topic是否存在(此流程中检测/manager-ledgers/{namespace}/下是否存在)
  • 创建topic路径一(/admin/partitioned-topics/persistent/{namespace}/)
  • 按照partition个数在/manager-ledgers/{namespace}下创建节点

Pulsar检测partitioned Topic是否存在流程

  • 检查topic是否存在(此流程中检测/admin/partitioned-topics/persistent/{namespace}/{topic}下是否存在)

Pulsar删除partitioned Topic流程

  • 针对每个partition,清理/manager-ledgers/{namespace}/下节点,并关闭bk相关资源
  • 删除/admin下topic节点

问题现象

​ 生产者重启后查询partitioned-topic是否存在,/admin/partitioned-topics/persistent/{namespace}/{topic}下不存在,然后尝试创建topic,又因为/manager-ledgers路径下存在而创建失败,无法自愈

紧急规避措施

删除/manager-ledgers路径下topic信息,生产者重试创建后自愈,代价:少量bk数据残留

优化策略

  • 优化查询partitionedTopic查询逻辑,两边判断,如果有问题,走删除流程彻底清理znode和bookkeeper数据信息
  • 考虑添加一致性对比策略,定期检测是否有partitioned-topic在两边znode不一致的问题
  • zk升级,znode数据丢失还在定位修复中
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。