我正在构建一个基于kafka流的企业事件调度器。计划的事件是从云中的微服务收集或生成的。每个微服务将有大约200个工作线程来处理用户请求,吞吐量超过10ktps。每个请求将生成一个事件,该事件将在将来被触发,并且需要将该事件发布到kafka,以便使用精确的once语义进行流处理。我可以在互联网上找到很多例子,在begintransaction和committransaction之间的循环中为制作者发送许多记录。在我的例子中,大约有200个线程生成事件,我认为对每条消息启动一个新事务是不对的。我目前的解决方案是创建一个blockingqueue,让所有线程将事件推送到其中,单例kafka生产者会定期清空队列,并在事务中将事件发送给kafka。到目前为止,它是相当稳定,但我担心,没有办法让每个请求知道,如果消息是成功地推到Kafka。从单个请求的Angular 来看,它将事件推送到阻塞队列,并立即返回给调用者。如果微服务崩溃,那么我们可能会丢失阻塞队列中的事件。我正在考虑的另一个解决方案是创建一个生产者池,其中有几十个生产者是用不同的事务id创建和启动的;然而,我认为这将是非常资源密集型的。我想知道是否有人对这个用例有更好的解决方案。谢谢。
暂无答案!
目前还没有任何答案,快来回答吧!