我正在处理xml,我需要每条记录发送一条消息,当我收到最后一条记录时我关闭了kafka生产者,这里的问题是kafka生产者的send方法是异步的,因此,有时当我关闭它所生产的生产者java.lang.IllegalStateException: Cannot send after the producer is closed.
我在某个地方徘徊,我可以让生产者打开。我的问题是¿它意味着什么?或者如果有更好的解决方案
--- ---编辑
<list>
<element attr1="" att2="" attr3=""/>
<element attr1="" att2="" attr3=""/>
<element attr1="" att2="" attr3=""/>
<element attr1="" att2="" attr3=""/>
<element attr1="" att2="" attr3=""/>
<element attr1="" att2="" attr3=""/>
<element attr1="" att2="" attr3=""/>
<element attr1="" att2="" attr3=""/>
...
</list>
想象一下以下场景:
问题元素的数量因此可以是80k,有时当我们调用disconnect方法时,它会继续以异步方式发送消息。所以我们需要先调用flush方法,但它会影响性能
谢谢
答案 0 :(得分:2)
在致电Producer.flush()
之前,您应致电Producer.close()
。这是一个阻止调用,并且不会在所有记录发送之前返回。
如果您不打电话给close()
,根据实施/语言,您最终可能会遇到资源/内存泄漏。