繁体   English   中英

如何在 Kafka Streams 中使用 Futures

[英]How to use Futures within Kafka Streams

在 Scala 中使用org.apache.kafka.streams.KafkaStreams库时,我一直在尝试读取 inputStream,将该信息传递给一个方法: validateAll(infoToValidate)返回一个 Future,解析它,然后发送到输出流。

例子:

builder.stream[String, Object](REQUEST_TOPIC)
      .mapValues(v => ValidateFormat.from(v.asInstanceOf[GenericRecord]))
      .mapValues(infoToValidate => {
        SuccessFailFormat.to(validateAll(infoToValidate))
      })

是否有任何关于执行此操作的文档? 我已经研究了 filter() 和 transform() 但仍然不确定如何处理 KStreams 中的 Futures。

答案取决于您是否需要保留消息的原始顺序。 如果是,那么您将不得不以一种或另一种方式阻止。 例如:

val duration = 10 seconds // whatever your timeout should be or Duration.Inf
sourceStream
  .mapValues(x => Await.result(validate(x), duration))
  .to(outputTopic)

但是,如果顺序不重要,您可以简单地使用 Kafka 生产者:

sourceStream
  .mapValues(x => validate(x)) // now you have KStream[.., Future[...]]
  .foreach { future =>
    future.foreach { item =>
      val record = new ProducerRecord(outputTopic, key, item)
      producer.send(record) // provided you have the implicit serializer
    }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM