关闭Kafka连接

时间:2014-11-06 10:08:28

标签: scala apache-kafka resource-leak

我有一个应用程序应该向Kafka发送有限数量的消息然后退出。出于某种原因,即使我关闭制作人,Kafka连接也会保持不变。我的实现(在Scala中)或多或少

object Kafka {
  private val props = new Properties()

  props.put("compression.codec", DefaultCompressionCodec.codec.toString)
  props.put("producer.type", "sync")
  props.put("metadata.broker.list", "localhost:9092")
  props.put("batch.num.messages", "200")
  props.put("message.send.max.retries", "3")
  props.put("request.required.acks", "-1")
  props.put("client.id", "myclient")

  private val producer = new Producer[Array[Byte], Array[Byte]](new ProducerConfig(props))
  private def encode(msg: Message) = new KeyedMessage("topic", msg.id.getBytes, write(msg).getBytes)

  def send(msg: Message) = Try(producer.send(encode(msg)))
  def close() = producer.close()
}

这里Message是一个简单的案例类,我如何将它转换为字节数组并不是真正相关。

消息确实到达,但是当我最终调用Kafka.close()时,应用程序不会退出,并且似乎没有释放连接。

有没有办法明确要求Kafka终止连接?

1 个答案:

答案 0 :(得分:1)

  

def close()= producer.close()

这将创建一个名为“close”的函数,该函数调用producer.close() 我没有看到你的代码实际关闭生产者的证据。

你需要打电话: producer.close