繁体   English   中英

当为单个主题定义两个活页夹时,SCS Kafka 中的路由如何工作与使用单个活页夹管道多个消费者

[英]How does routing in SCS Kafka work when it comes when defines two binders for a single topic vs piping multiple consumers with a single binder

我有多个消费者必须收听一个 Kafka 主题。 我发现有两种方法可以做到:

  1. 在每个消费者 Bean 的配置中使用一个活页夹,并通过路由条件指定一个路由来管理它(使用 Spel)

  2. 仅使用单个绑定器并定义单个消费者 Bean 并使用 andThen() 到 pipe 它们并在每个方法中指定一个内部条件以仅在满足条件时才处理消息。

例子:

@Bean
public Consumer<Message> doStuff(){
  doA().andThen(doB());
}

private void doA(){
  if(condition)
  //do stuff
  else //ignore
}

private void doB(){
  if(condition)
  //do stuff
  else //ignore
}

除了在第二种方法中,如果在第一种方法中抛出异常,它不会 go 进一步到第二种方法(因为序列顺序很重要),还有其他副作用吗? 我很想知道在第一种方法中,两个消费者是否可以并行运行并独立使用消息,或者因为他们收听相同的主题,所以没有真正的区别,因为一个消费者可以阻止另一个消费者?

在Kafka中,多消费者运行在不同的线程中,独立消费消息。 当多个消费者订阅同一个主题并属于同一个消费者组时,每个消费者都会收到来自主题中分区的不同子集的消息。 如果使用第二种方法,程序将在一个线程中运行,其并发性和吞吐量将受到限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM