【问题标题】:Spring Kafka disabling listening from a list of topicsSpring Kafka禁用从主题列表中收听
【发布时间】:2017-09-26 08:56:14
【问题描述】:

我们使用 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(){

}

因为我们有单独的容器工厂,所以这段代码工作得很好。 现在我们需要启动这个应用程序的多个实例,其中一个实例将侦听 firstContainer 而 secondContainer 将被禁用

而对于第二个实例,它只会启用 secondContainer 并禁用 firstContainer。 有人可以帮助了解是否可以禁用对主题(主题列表)的收听?

【问题讨论】:

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


    【解决方案1】:
    1. 您的两个(或多个)实例可以相同并接受来自外部配置的主题列表。 @KafkaListener 允许这样做。

    2. Spring @Profile 功能,如果您仍想在应用程序中保留多个 bean。这样,您应该将您的 @KafkaListener 方法分割到不同的类,并用适当的 @Profile 标记它们的组件,这同样可以在外部激活。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 2019-01-18
      • 2014-09-15
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 2020-03-11
      相关资源
      最近更新 更多