我们使用spring kafka配置来接收来自上游系统的消息。 我们有主题配置的java配置
@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 :(得分:0)
您的两个实例(或多个实例)可以相同,并接受外部配置中的主题列表。 @KafkaListener
允许这样做。
如果您仍希望在应用程序中保留多个bean,则有Spring @Profile
功能。这样,您应该将@KafkaListener
方法切换到不同的类,并使用适当的@Profile
标记其组件,这也可以在外部激活。
Apache Kafka的概念为Consumer Group
,意味着同一组中的所有使用者都加入了代理,但只有其中一个将使用该主题中单个分区的记录。这种方式与应用程序的实例数量无关,您仍然可以保持一致性,因为在正确使用Kafka组的情况下,没有什么可担心重复的。