ZooKeeper 避坑实践: Zxid 溢出导致选主
原文中文,约2000字,阅读约需5分钟。
📝
内容提要
线上 flink 用户使用 ZooKeeper 做元数据中心以及集群选主,当 zxid 溢出时,会触发一次选主,导致 flink Job 的非预期重启,造成业务损失。本文从原理和最佳实践上分析和解决由于 ZooKeeper zxid 溢出导致的集群选主问题,MSE 提供风险管理以及集群选主相关告警,可以提前预防和及时感知选主风险,避免业务损失。
🎯
关键要点
-
线上 flink 用户使用 ZooKeeper 作为元数据中心和集群选主,zxid 溢出会导致非预期重启和业务损失。
-
ZooKeeper 提供当前处理的最大 zxid,通过 stat 接口查看,计算 zxid 距离溢出值的差距。
-
MSE 提供风险管理和集群选主相关告警,提前预防和及时感知选主风险。
-
风险管理定期扫描集群风险,通知用户 zxid 溢出是集群风险之一。
-
zxid 是 ZooKeeper 中事务的全局唯一 id,由高32位的 epoch 和低32位的计数部分组成。
-
当单个 epoch 中的事务过多,导致 counter 超过最大值时,ZooKeeper 会主动触发选主以避免事务全序关系被破坏。
-
集群选主对大多数客户端无感知,但依赖 ZooKeeper Disconnected 事件的应用可能会受到影响。