'How to stop listening in a Spring Kafka consumer?
I use Spring for Apache Kafka
. I'd like to stop listening to my topic and wait to escape OOM. How can I do it?
Solution 1:[1]
Kafka provides an option to pause() and resume() the consumption from a topic. You can use these methods by implementing a wait in between to revive from the memory issue.
Solution 2:[2]
Solution 3:[3]
public static void stopConsumer(final String topic) {
ConcurrentMessageListenerContainer<String, String> container
= consumersMap.get(topic);
container.stop();
}
Solution 4:[4]
With Spring boot and Spring Cloud, there is a way to stop a particular consumer using actuators.
Kafka Streams binder of Spring Cloud allows us to start or stop a consumer or function binding associated with it.
Add management.endpoints.web.exposure.include = bindings
in application.properties ( or yaml formatted property in application.yml)
A GET call to http://localhost:9009/actuator/bindings
would expose all the bindings.
A POST call to http://localhost:9009/actuator/bindings/{name}
can start or stop the binding.
Sample cURL to Stop a consumer :
curl -d '{"state":"STOPPED"}' -H "Content-Type: application/json" -X POST http://localhost:8080/actuator/bindings/consumer-in-0
Sample cURL to Start a consumer :
curl -d '{"state":"STARTED"}' -H "Content-Type: application/json" -X POST http://localhost:8080/actuator/bindings/consumer-in-0
Visit Spring Cloud Stream Binder Documentation for further details.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Archie |
Solution 2 | |
Solution 3 | svdragster |
Solution 4 | BlackViper |