我正在基于Kafka流构建企业事件调度程序。计划的事件是从云中的微服务收集或生成的。每个微服务将具有约200个工作线程,以处理吞吐量超过10K TPS的用户请求。每个请求都将生成一个事件,该事件将在以后触发,并且该事件需要发布到Kafka以进行具有一次精确语义的流处理。我可以在Internet上找到很多示例,这些示例在生产者的beginTransaction和commitTransaction之间的循环中发送许多记录。就我而言,大约有200个线程会生成事件,我认为每条消息启动一个新事务并不正确。我当前的解决方案是创建一个BlockingQueue并让所有线程将事件推送到其中,而单例Kafka生产者将定期清空队列并将事件通过事务发送给Kafka。到目前为止,它非常稳定,但是我担心每个请求都无法知道消息是否成功发送到Kafka。从单个请求的角度来看,它将事件推送到阻塞队列并立即返回到调用方。如果微服务崩溃,那么我们可能会丢失阻塞队列中的事件。我正在考虑的另一个解决方案是创建一个生产者池,其中包含数十个使用不同事务ID创建和启动的生产者。但是,我认为这将非常耗费资源。我想知道是否有人对此用例有更好的解决方案。谢谢。