0

我們使用spring kafka配置接收來自上游系統的消息。 我們的Java配置主題配置春季Kafka禁用從主題列表中收聽

@Bean(id="firstcontainer") 
protected ConcurrentMessageListenerContainer createContainerInstance(...) { 
//topics addition 
} 


@Bean(id="secondcontainer") 
protected ConcurrentMessageListenerContainer createContainerInstance(...) { 
//topics addition 
} 


@KafkaListener(firstcontainer) 
public void listenerFirst(){ 

} 

@KafkaListener(secondcontainer) 
public void listenerSecond(){ 

} 

此代碼工作完全正常,因爲我們有單獨的ContainerFactory通過。 現在我們有要求啓動這個應用程序的多個實例,其中一個實例將監聽firstContainer並且secondContainer將被禁用

而對於第二個實例,它只會啓用secondContainer並禁用firstContainer。 有人可以幫助理解是否可以禁止從主題(主題列表)中收聽?

回答

0
  1. 您的兩個實例(或多個)可以是相同的,並接受來自外部配置的主題列表。 @KafkaListener允許這樣做。

  2. 如果你仍然想在應用程序中保留幾個bean,那麼Spring @Profile就有彈性。通過這種方式,您應該將@KafkaListener方法切斷爲不同的類別,並使用適當的@Profile標記它們的組件,並且可以在外部激活該組件。

  3. Apache Kafka的概念爲Consumer Group,這意味着同一組中的所有使用者都加入到代理,但其中只有一個消費者會佔用主題中單個分區的記錄。這種方式與應用程序實例的數量無關,您仍然會保持一致性,因爲在使用正確的Kafka組的情況下沒有必要擔心重複。