Akka 在消费者API中使用createDrainingControl?
我正在阅读阿尔帕卡卡夫卡的消费者API文档。我偶然发现了这段代码。据我所知,偏移量是使用msg.committeableoffset()提交的。那么为什么我们需要.toMat()和mapMaterializedValue()。我不能将其连接到水槽。忽略()Akka 在消费者API中使用createDrainingControl?,akka,kafka-consumer-api,akka-stream,alpakka,Akka,Kafka Consumer Api,Akka Stream,Alpakka,我正在阅读阿尔帕卡卡夫卡的消费者API文档。我偶然发现了这段代码。据我所知,偏移量是使用msg.committeableoffset()提交的。那么为什么我们需要.toMat()和mapMaterializedValue()。我不能将其连接到水槽。忽略() 无法附加到Sink.ignore,因为您已经附加了committer.Sink。 但您可以放弃具体化的值 该示例使用toMat with Keep.both来保留两个具体化的值,即源控件和接收器的Future[Done]。 使用这两个值,它在
无法附加到Sink.ignore,因为您已经附加了committer.Sink。 但您可以放弃具体化的值 该示例使用toMat with Keep.both来保留两个具体化的值,即源控件和接收器的Future[Done]。 使用这两个值,它在mapMaterializedValue中创建一个DrainingControl,允许您在停止流之前停止流或排空流,或者在流停止时收到通知 如果你不关心这个控件(尽管你应该),你可以使用
Consumer.committableSource(consumerSettings, Subscriptions.topics(topic))
.mapAsync(
1,
msg ->
business(msg.record().key(), msg.record().value())
.thenApply(done -> msg.committableOffset()))
.to(Committer.sink(committerSettings.withMaxBatch(1)))
.run(materializer);
感谢您的解释,正如您提到的,DrainingControl允许我停止流或排放流。如果我没有实现它,消费者会不会不选择主题中的新卡夫卡消息?我想我是想知道drainControl的用法
Consumer.committableSource(consumerSettings, Subscriptions.topics(topic))
.mapAsync(
1,
msg ->
business(msg.record().key(), msg.record().value())
.thenApply(done -> msg.committableOffset()))
.to(Committer.sink(committerSettings.withMaxBatch(1)))
.run(materializer);