如果我们在后台启动KafkaStream应用程序(例如Linux),是否有一种方法可以从外部向应用程序发出信号,以启动优雅的关闭?
KafkaStreams#close()
进行干净的关闭:final CountDownLatch latch = new CountDownLatch(1);
// attach shutdown handler to catch control-c
Runtime.getRuntime().addShutdownHook(new Thread("streams-shutdown-hook") {
@Override
public void run() {
streams.close();
latch.countDown();
}
});
try {
streams.start();
latch.await();
} catch (Throwable e) {
System.exit(1);
}
System.exit(0);
Ctrl-C
发送一个SIGINT
信号,而正常的kill <pid>
发送一个SIGTERM
信号。这些信号都被关机钩子所覆盖(请参阅 https://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html 和 https://dev59.com/QnE85IYBdhLWcg3w8IM4#2541618)。没有被覆盖的是来自kill -9 <pid>
的SIGKILL
。我建议阅读Java文档--这与Kafka的Streams API无关。 - migunoStreamThreads
。 - Matthias J. Sax