如何控制/暂停子源/流中的Akka流

时间:2018-12-17 18:13:50

标签: apache-kafka akka-stream alpakka

我们使用带有alpakka kafka的akka​​流,使用主题模式订阅来吸收来自不同主题的消息。使用groupBy()为每个主题创建子源/流。
我们如何暂停/恢复/控制单个主题的消息处理,而又不影响其他主题的消息处理。

以下选项无效。
使用RestartSource将重新启动源,并影响所有主题的处理。
使用RestartFlow将删除失败的元素,并且还会影响所有主题的处理。
如果我们必须为所有主题重新启动源,则为每个主题创建一个源会占用大量资源,并且会产生额外的开销。

Consumer
    .committableSource(consumerSettings.withGroupId("test-group"),
            Subscriptions.topicPattern("/some/pattern"))
    .groupBy(5000, msg -> msg.record().topic())
    .mapAsync(1, msg -> business(msg).thenApply(response -> {
        if (response.status().isFailure()) {
            throw new RuntimeException("Boom");
        }
        return msg.committableOffset();}))
    .mapAsync(1, offset -> offset.commitJavadsl());

0 个答案:

没有答案