是否可以将一个 Spring Kafka 使用者分配给一个实例,将另一个使用者分配给同一服务的另一个实例



我有两个Kafka监听器,如下所示:

@KafkaListener(topics = "foo1, foo2", groupId = foo.id, id = "foo")
public void fooTopics(@Header(KafkaHeaders.RECEIVED_TOPIC) String topic, String message, Acknowledgment acknowledgment) {
//processing
}
@KafkaListener(topics = "Bar1, Bar2", groupId = bar.id, id = "bar")
public void barTopics(@Header(KafkaHeaders.RECEIVED_TOPIC) String topic, String message, Acknowledgment acknowledgment) {
//processing

同一个应用程序在两个实例(如 Inc1 和 Inc2(上运行。 有没有办法让我将 Foo 侦听器分配给 Inc1,将酒吧侦听器分配给 Inc2。 如果一个实例正在关闭,则侦听器(Foo和bar(都分配给正在运行的实例。

您可以使用自 2.2 以来引入的 @KafkaListener 属性 autoStartup。
当一个实例死亡时,您可以在另一个实例中自动启动它,如下所示:

@Autowired
private KafkaListenerEndpointRegistry registry;
...
@KafkaListener(topics = "foo1, foo2", groupId = foo.id, id = "foo", autoStartup = "false")
public void fooTopics(@Header(KafkaHeaders.RECEIVED_TOPIC) String topic, String message, Acknowledgment acknowledgment) {
//processing
}
//Start up condition
registry.getListenerContainer("foo").start();

相关内容

最新更新