Spring Kafka禁用主题列表中的监听

时间:2017-09-25 23:13:56

标签: spring-boot apache-kafka kafka-consumer-api spring-kafka

我们使用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。 有人可以帮助理解是否可以禁用主题收听(主题列表)?

1 个答案:

答案 0 :(得分:0)

  1. 您的两个实例(或多个实例)可以相同,并接受外部配置中的主题列表。 @KafkaListener允许这样做。

  2. 如果您仍希望在应用程序中保留多个bean,则有Spring @Profile功能。这样,您应该将@KafkaListener方法切换到不同的类,并使用适当的@Profile标记其组件,这也可以在外部激活。

  3. Apache Kafka的概念为Consumer Group,意味着同一组中的所有使用者都加入了代理,但只有其中一个将使用该主题中单个分区的记录。这种方式与应用程序的实例数量无关,您仍然可以保持一致性,因为在正确使用Kafka组的情况下,没有什么可担心重复的。