多个 KafkaListener 类 可以听同一个话题吗?
Can multiple KafkaListener classes listen to the same topic?
我有一个包含多个事件(不同类型)的 kafka 主题,我想在单个应用程序中的不同处理程序 类 中处理这些事件。所以我的问题是 - 我可以创建两个使用相同主题但每个处理不同事件(来自同一主题)的 类(spring 组件)吗?
@Component
@KafkaListener(topics = "topicA")
public class SomeClass {
@KafkaHandler
public void handleEventA(EventA eventA) {
}
}
@Component
@KafkaListener(topics = "topicA")
public class AnotherClass {
@KafkaHandler
public void handleEventB(EventB eventB) {
}
@KafkaHandler
public void handleEventC(EventC eventC) {
}
}
通常您会将所有 @KafkaHandler
放在同一个 class 中。
你可以随心所欲,但每个监听器需要在不同的消费者组中,你需要一个默认方法来丢弃你不感兴趣的事件。
@Component
@KafkaListener(id = "some", topics = "topicA")
public class SomeClass {
@KafkaHandler
public void handleEventA(EventA eventA) {
}
@KafkaHandler(isDefault = true)
public void handleOthers(Object others) {
// discard
}
}
@Component
@KafkaListener(id = "another", topics = "topicA")
public class AnotherClass {
@KafkaHandler
public void handleEventB(EventB eventB) {
}
@KafkaHandler
public void handleEventC(EventC eventC) {
}
@KafkaHandler(isDefault = true)
public void handleOthers(Object others) {
// discard
}
}
分享一下我们尝试过这种方法后的发现,监听器容器的逻辑是按@KafkaListener
class执行的。即FilterStrategy和MessageConverter的关联逻辑对于同一个事件会运行多次,这可能不是我们想要的。
我有一个包含多个事件(不同类型)的 kafka 主题,我想在单个应用程序中的不同处理程序 类 中处理这些事件。所以我的问题是 - 我可以创建两个使用相同主题但每个处理不同事件(来自同一主题)的 类(spring 组件)吗?
@Component
@KafkaListener(topics = "topicA")
public class SomeClass {
@KafkaHandler
public void handleEventA(EventA eventA) {
}
}
@Component
@KafkaListener(topics = "topicA")
public class AnotherClass {
@KafkaHandler
public void handleEventB(EventB eventB) {
}
@KafkaHandler
public void handleEventC(EventC eventC) {
}
}
通常您会将所有 @KafkaHandler
放在同一个 class 中。
你可以随心所欲,但每个监听器需要在不同的消费者组中,你需要一个默认方法来丢弃你不感兴趣的事件。
@Component
@KafkaListener(id = "some", topics = "topicA")
public class SomeClass {
@KafkaHandler
public void handleEventA(EventA eventA) {
}
@KafkaHandler(isDefault = true)
public void handleOthers(Object others) {
// discard
}
}
@Component
@KafkaListener(id = "another", topics = "topicA")
public class AnotherClass {
@KafkaHandler
public void handleEventB(EventB eventB) {
}
@KafkaHandler
public void handleEventC(EventC eventC) {
}
@KafkaHandler(isDefault = true)
public void handleOthers(Object others) {
// discard
}
}
分享一下我们尝试过这种方法后的发现,监听器容器的逻辑是按@KafkaListener
class执行的。即FilterStrategy和MessageConverter的关联逻辑对于同一个事件会运行多次,这可能不是我们想要的。