我有一个由3个代理组成的集群,这些集群已经运行了很长时间。我希望将它们消耗掉,以便不接受任何新消息,但消费者可以阅读这些消息。
目标是最终使经纪人中没有任何未消耗的东西,以便我可以替换它们。我的生产者具有足够的弹性,可以处理一段时间内无法生产的内容(本地缓存,后备系统等)。我的滞后时间很短,所以应该很快。
我搜寻了各种配置,但是找不到只阻止生产者而不阻止消费者的方法。
对于它的价值,我做尝试添加新的代理,然后重新分配分区。即使是小话题,也要花几个小时。
答案 0 :(得分:1)
在我看来,使用推荐的方法https://kafka.apache.org/documentation/#basic_ops_decommissioning_brokers就足够了(您当然可以尝试对生产者进行防火墙保护,或者在群集上添加ACL并禁止它,但是在我看来,这是开销很大的事情,在这种情况下不合适)。 至少我从来没有遇到过问题。
如果有大量数据,重新分配确实会花费相当长的时间,但是考虑到您所说的滞后时间很小,我建议以下几点:
为确保滞后时间始终接近零,请减少主题的保留时间(每个主题的 retention.ms 或全局 log.retention.hours (仅此处)重新启动)),将所有分区移至新集群(如上所述),然后返回保留期。