将kafka消费者设置为消费者组中的灾难恢复消费者?

时间:2020-05-10 12:17:19

标签: java apache-kafka kafka-consumer-api

我有一个Kafka基础架构,其主题只有一个分区,将有2个使用者订阅该分区。第一个使用者是在应用程序的主实例中配置的,第二个使用者是应用程序的灾难恢复实例的一部分。

现在的问题是,我希望第二个使用者充当故障转移使用者,即,如果应用程序使用者的主实例出现故障,则故障转移应用程序的使用者应开始使用消息。

我可以做的一件事是,在第二个用户端,我可以通过调用Thread#Sleep引入延迟,这样会将分区分配给主实例

 // called at the consumer bean initialization
 void subscribeConsume() {
    // leaving exception handling for brevity
    if(application.type.equals("BackupApp"))  {
       TimeUnit.MINUTE.sleep(5);
    }
     ...
    // subscription logic
 }

但这似乎是一种解决方法/破解,而不是可靠的解决方案。消费者库中是否有任何Kafka属性可以在这里提供帮助。

1 个答案:

答案 0 :(得分:0)

如果您有一台kafka服务器,它的一个主题具有单个分区,而两个使用者使用同一主题,则默认情况下,一次只有一个使用者能够接收消息。因为它只有一个分区。当该使用者关闭时,在会话超时后(默认值为5分钟),将启动使用者重新平衡,您的第二个使用者将能够接收相同主题的消息。现在,正如您所提到的,您拥有kafka基础结构,如果您提到该基础结构是否具有kafka集群,则在故障转移配置中就有意义了。