1、除了优雅停机,否则消息一定会丢。
2、是的,不是立即发送,你可以通过配置linger.ms=0
立即发送,但是吞吐量就会打折。
参见:https://www.orchome.com/511
1、如果这么说的话,假设close()
之前,后台还有消息没发送,这时候客户端挂掉了,那么也会导致消息丢失?那有什么办法可以解决吗?
2、send()
是否可以理解为只是保存消息
当进程结束时,kafka还有些消息在缓存中来不及发送,所以调用一下close()
,告诉kafka生产者客户端立即发送。
否则进程直接结束了,那你消息就没了。
生产者的缓冲空间池保留尚未发送到服务器的消息,后台I/O线程负责将这些消息转换成请求发送到集群。如果使用后不关闭生产者,则会丢失这些消息。
请问,为什么不关闭生产者为什么会丢失消息