我需要基于某些数据库驱动的属性来打开/关闭Kafka使用者。如何实现。
我想到的一种方法是:当消费者标记关闭时,从消费者抛出异常。并将容器工厂配置定义为
factory.setErrorHandler(new SeekToCurrentErrorHandler());
但是它会主动寻找相同的消息。
有什么方法可以关闭心跳,然后根据需要重新打开。
答案 0 :(得分:2)
使用者有一些API可以控制其状态:
pause()
/ resume()
:允许从一组分区中停止/恢复消耗。消费者保持订阅状态(因此没有重新平衡),但是直到恢复后才获取任何新记录
unsubscribe()
:允许更改使用者订阅,如果未订阅任何内容,它将保持与集群的连接。
如果您与消费者“完成”,您也可以致电close()
并在需要时开始新的
答案 1 :(得分:2)
您可以stop()
和start()
侦听器容器。
由于您使用的是容器工厂,因此您似乎正在使用@KafkaListener
。
在这种情况下
@KafkaListener(id = "foo" ...)
然后使用KafkaListenerEndpointRegistry
bean ...
registry.getListenerContainer("foo").stop();