过滤后,Akka流kafka提交偏移量

时间:2018-03-13 18:05:18

标签: scala akka-stream akka-kafka

我正在尝试为akka流中的偏移量设置一个至少一次的提交策略,而且我无法理解我在流上使用过滤器的情况的预期模式。

我的期望是,所有过滤后的消息都不会得到它们的偏移量,因此它们最终将处于无限循环处理中。

一个犹豫不决的例子就是过滤所有这样的消息:

Consumer.committableSource(consumerSettings, Subscriptions.topics("topic1"))
.filter(_ => false)
.mapAsync(3)(_.committableOffset.commitScaladsl()) 
.runWith(Sink.ignore)

我只能看到在流程中包含我的过滤器的解决方案,检查逻辑是否会在这种情况下过滤掉并提交,但这看起来并不优雅,并且会减少过滤器形状的值。

过滤并不是一件罕见的事情,但是我看不出有任何提供偏移的优雅方式?对我而言,框架无法做到这一点似乎很奇怪,所以我错过了什么?

1 个答案:

答案 0 :(得分:0)

我无法找到当前akka实现的解决方案,以便更加智能地提交索引,因此我已将责任委托给kafka级别的kafka设置自动提交,并将其与优雅的关闭策略相结合对于应用程序,所以当蓝色/绿色部署发生时,所有消息都在应用程序关闭之前进行处理。

  • 自动提交为真:
val consumerSettings = ConsumerSettings(system, new ByteArrayDeserializer, new StringDeserializer)
      .withBootstrapServers("localhost:9092")
      .withGroupId("group1")
      .withProperty(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, true)
  • 正常关机:
val actorMaterializer = ActorMaterializer(
  ActorMaterializerSettings(system)
scala.sys.addShutdownHook {
        actorMaterializer.system.terminate()
        Await.result(actorMaterializer.system.whenTerminated, 30.seconds)
}