KafkaStreams无法关闭

时间:2018-09-12 20:26:34

标签: apache-kafka-streams

如果我创建并启动一个KafkaStream实例,然后在关闭钩子调用.close()中,则什么都没有发生-日志记录表明存在的一个StreamThread进入了PENDING_SHUTDOWN状态,但是永远就这样坐着。我已经尝试了所有运气-读过Kafka流源代码以查看其在关机期间的工作,但是在我看来,该代码暗示StreamThread如果处于运行状态,将永远不会停止(这可能是不对的) -我没有在Kafka JIRA中看到过这种性质的错误。

这是我简单的KafkaStream(scala)应用程序的相关代码:

val props: Properties = {
  val p = new Properties()
  p.put(StreamsConfig.APPLICATION_ID_CONFIG, "test-application")
  p.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092")
  p.put(StreamsConfig.NUM_STREAM_THREADS_CONFIG, "1")
 p
}


implicit val produced = Produced.`with`(new StringSerde(), new StringSerde())

val builder: StreamsBuilder = new StreamsBuilder()
val in: KStream[String, String] = builder.stream[String, String]("input-topic")

in.map((k,v) =>{ 
         println("Consumed and transforming value")
         (k,s"$v_transformed") 
     }).to("output-topic")

val streams: KafkaStreams = new KafkaStreams(builder.build(), props)

streams.start()

sys.addShutdownHook(streams.stop())

如您所见,它只是从一个主题中读取内容,对使用记录中的值进行微小的更改,然后将其写入另一个主题中。

流已启动,当向其发送SIGINT时,应用程序将调用stop()。

当我^ C终止进程时,我看到Kafka日志记录指出StreamThread-1正在转换为PENDING_SHUTDOWN,这是有史以来的最高记录。它最终应该(在几秒钟之内)达到状态NOT_RUNNING,但是永远不会达到,并且它将继续输出它从输入主题中继续读取的每条记录的println语句。

我在这里做什么错了?

更新:根据评论者的建议,我尝试以60秒的超时时间调用close(),但最终还是得到了,但仍然没有关机:-

  

[shutdownHook1]信息o.apache.kafka.streams.KafkaStreams-   流客户端   [-]   流客户端无法在超时时间内完全停止

0 个答案:

没有答案