You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@rocketmq.apache.org by GitBox <gi...@apache.org> on 2020/07/06 06:52:12 UTC

[GitHub] [rocketmq] gaoyf edited a comment on issue #2090: The same issue as #2042 during the hot update of name servers.

gaoyf edited a comment on issue #2090:
URL: https://github.com/apache/rocketmq/issues/2090#issuecomment-654047550


   > namesrv-a上的topic路由信息没了,client查询的时候namesrv会返回“No topic route info in name server for the topic”异常,client有一个数据保护机制是当查询异常时不会更新本地缓存的路由,所以至少会保留有一个broker关于这个topic的路由,理论上不会出现因为没有路由而收发不了消息的问题。
   
   @wqliang 对,你说的`至少会保留有一个broker关于这个topic的路由` 没错,但是注意,我说的是 无法**正常**生产消费,比如下面的场景:
   1. 对于生产者(只持有一个broker的路由,此时集群管理员可能不知道处于这样状态的生产者),如果这个时候broker更新(升级或下线)将影响消费发送。
   2. 对于消费者,同样的问题,某个实例可能只持有一个或几个broker的路由,那么这个实例将不再向其他broker(未持有路由的broker)发送心跳,这样导致的问题就是,其他同组的其他实例rebalance时拉取的clientId列表中将不包含这个有问题的实例,结果就是消息被重复消费。
   
   > 因此,上述修改也只是尽量加快client端对变化的生效,仍然没有解决更新步调不一致,broker先于client生效的问题。
   
   注意,官方之前的修复代码#2042,并不能完全解决上面说的有问题的情况,我最上面已经描述过了。而我说的解决方案,是最终一致性,即最终肯定会保持一致。
   
   > 提供一个思路,client和broker更新namesrv地址列表分开两个接口管理。。。
   
   另外,这个思路很不错,但是增加了运维的困难度。如果能在代码层面兼容岂不是更好些。
   
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org