【数媒在线课堂】复现:在线课堂

若要解决问题,最好能够稳定地复现出问题,这样才能确定问题的根本原因,并且确认修复是否完成在线课堂

因为节点是在 requsetHandle.close 方法中执行删除,broker 节点关闭会触发连接关闭,进而触发删除在线课堂。假设:客户端通过 brokerA 发起 FindCoordinator 请求,写入 zk 节点 /client_group

_id/xxx,同时请求返回 brokerB 作为 Coordinator,后续与 brokerB 进行 joinGroup、syncGroup 等交互确定消费关系,客户端在 brokerA、brokerB、brokerC 都有分区消费在线课堂。这时重启 brokerA,分区均衡到 BrokerC 上,但此时 /client_group_id/xxx 因关闭 broker 而断开连接被删除,consumer 消费刚转移到 topic1-partition-1 的分区就无法获取到 groupId。

按照假设,有 3 个 broker,开启生产和消费,通过在 FindCoordinator 返回前获取 node.leader () 的返回节点 BrokerB,关闭 brokerA 后,brokerC 出现断点复现,再关闭 brokerC,brokerA 也会复现(假设分区在 brokerA 与 brokerC 之间转移)在线课堂

复现要几个条件:

broker 数量要足够多 (不小于 3 个)

broker 内部有 zk 缓存 metadataCache 默认为 5 分钟在线课堂,可以把时间调小为 1 毫秒,相当于没有 cache

findCoordinator 返回的必须是其在线课堂他 broker 的 IP

重启的必须是接收到 findCoordinator 请求那台 broker在线课堂,而不是真正的 coordinator,这时会从 zk 删除节点

分区转移到其他 broker在线课堂,这时新的 broker 会重新读取 zk 节点数据

到此,我们基本上清楚了问题原因:连接关闭导致 zk 节点被删除了,别的 broker 节点需要时就读取不到了在线课堂。那怎么解决?

本站内容来自用户投稿,如果侵犯了您的权利,请与我们联系删除。联系邮箱:835971066@qq.com

本文链接:http://gmstar.cn/post/104.html