有一个kafka集群,我从中消耗了两个主题并加入它。随着连接的结果我用数据库做一些操作。对DB的所有操作都是异步的,因此它们返回一个Future(scala.concurrent.Future,但无论如何它与java.util.concurrent.CompletableFuture相同)。因此,我得到了这样的代码:
val firstSource: KTable[String, Obj]
val secondSource: KTable[String, Obj2]
def enrich(data: ObjAndObj2): Future[EnrichedObj]
def saveResultToStorage(enrichedData: Future[EnrichedObj]): Future[Unit]
firstSource.leftJoin(secondSource, joinFunc)
.mapValues(enrich)
.foreach(saveResultToStorage)
我是否可以使用流中的未来值进行操作,或者有更好的方法来处理异步任务(例如Akka流中的.mapAsync)?
答案 0 :(得分:4)
我有同样的问题。据我所知,Kafka Streams不是像Akka Streams一样处理多速率流媒体的。 Kafka Streams没有相当于Akka具有mapAsync,throttle,conflate,buffer,batch等的多速率原语.Kafka Streams擅长处理主题和有状态数据聚合之间的连接。 Akka Streams擅长多速率和异步处理。
您有几个选择如何处理: