Ind*_*nde 3 java apache-kafka spring-kafka
我是第一次使用 Spring kafka,我使用 spring kafka 创建了生产者和消费者。我的 kafka 服务器在本地主机上运行,并创建了一个名为 test 的主题。我无法通过简单地调用向消费者发送消息
KafkaTemplate.send(topicName,Data);
Run Code Online (Sandbox Code Playgroud)
在对同一个对象调用 send 之后,我不得不在 kafkaTemplate 上调用 flush() ,然后消费者才能接收数据。好的,它可以工作,而且很棒。但是有人可以向我解释幕后发生的事情吗?为什么需要调用flush方法。
来自官方 spring kafka 文档。
public void flush()
Run Code Online (Sandbox Code Playgroud)
冲洗生产者。注意 如果 ProducerFactory 提供单例生产者(例如 DefaultKafkaProducerFactory),则调用此方法才有意义。
先感谢您。
neu*_*euo 10
生产者的实现是异步的。消息存储在内部队列中等待内部线程发送,这将通过潜在的批处理提高效率。
因此,当程序退出时,消息可能会留在客户端的内存中。在这种情况下,Kafka 服务器实际上不会收到这些消息。
消息将在由queue.buffering.max.ms
或其他大小/数量限制定义的超时时间内发送。
flush
强制将发送队列中的所有消息传递到服务器。
归档时间: |
|
查看次数: |
4425 次 |
最近记录: |