apache-kafka - 是否可以将一个spring kafka消费者分配给一个实例,将另一个消费者分配给同一服务的另一个实例
问题描述
我有两个 kafka 听众,如下所示:
@KafkaListener(topics = "foo1, foo2", groupId = foo.id, id = "foo")
public void fooTopics(@Header(KafkaHeaders.RECEIVED_TOPIC) String topic, String message, Acknowledgment acknowledgment) {
//processing
}
@KafkaListener(topics = "Bar1, Bar2", groupId = bar.id, id = "bar")
public void barTopics(@Header(KafkaHeaders.RECEIVED_TOPIC) String topic, String message, Acknowledgment acknowledgment) {
//processing
同一个应用程序在两个实例上运行,例如 inc1 和 inc2。如果我可以将 foo 侦听器分配给 inc1 并将 bar 侦听器分配给 inc2,有什么办法吗?如果一个实例出现故障,则侦听器(foo 和 bar)都分配给正在运行的实例。
解决方案
您可以使用自 2.2 以来引入的 @KafkaListener 属性autoStartup。
当一个实例死机时,您可以像这样在另一个实例中自动启动它:
@Autowired
private KafkaListenerEndpointRegistry registry;
...
@KafkaListener(topics = "foo1, foo2", groupId = foo.id, id = "foo", autoStartup = "false")
public void fooTopics(@Header(KafkaHeaders.RECEIVED_TOPIC) String topic, String message, Acknowledgment acknowledgment) {
//processing
}
//Start up condition
registry.getListenerContainer("foo").start();
推荐阅读
- java - 如何在 Android 中优化多个改造调用以及跟踪进度和故障?
- jquery - 内容高度变化时扩展 Flickity 幻灯片的高度
- testing - Symfony 4.1 OneToMany 在测试中返回空
- tensorflow - ML Engine 模型的局部预测
- amazon-web-services - AWS 云中带有订阅的 Apollo GraphQL 服务器
- slack-api - 即使我提供不同的频道,松弛的传入 webhook 总是发布到默认频道
- php - 使用 PHP 中的扩展方法更改输出
- javascript - 如何使用 javascript 和 HTML 模板来填充 div
- beacon - 是否有任何 google api 用于跟踪最终用户单击的通知的数量?
- clang - C++ Builder:使用 Clang 编译器时出现“未解决的外部”错误 (__InitExceptBlockLDTC)