我们正在为kafka偏移量使用自定义存储空间。分区是自动分配的,我们使用ConsumerRebalanceListener来保存偏移量,清除线程等。
在'onPartitionsAssinged'方法中,我们从自定义商店中查找已分配分区的已提交偏移量。如果未找到任何已提交的偏移量,我们将从kafka获得适当的偏移量(最早/最新)。
根据ConsumerRebalanceListener的javadoc:"保证所有的消费者进程都会调用“onPartitionsRevoked'在任何进程调用' onPartitionsAssigned'之前
但是,我们现在已经看过几次,在重新平衡时,没有调用'onPartitionsRevoked'。直接调用'onPartitionsAssigned',这会使我们的应用程序处于错误状态。
我们简要地查看了代码,看起来代码正在按照javadocs的承诺进行。所以,问题是,是否有任何边缘情况,任何可能触发这种情况的流量?
在两种情况下,我们观察到的一件事是,在尝试从卡夫卡获得抵消时(因为自定义商店中没有抵消),由于过时的领导信息,Fetcher至少重试了一次:
日志: "由于过时的领导信息,尝试获取分区{}的偏移失败,重试。"
请告诉我们。
谢谢!