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数据丢失还在定位修复中

你可能感兴趣的:(Znode数据丢失导致pulsar元数据不一致问题复盘)