如何在Akka Streams Kafka中构建ProducerMessage时配置偏移参数?

时间:2017-11-11 11:32:59

标签: scala apache-kafka akka-stream reactive-kafka

我正在使用Scala 2.11和Akka Streams Kafka 0.17。

我有一个,其中:

  • 使用Source.actorRef创建Source。这里,actor被安排在一定的时间间隔内运行并连续生成消息,这些消息将被发送到流中。
  • 我已将Producer附加为Flow。制作人将ProducerMessage.Message推送到Kafka主题。
  • 一些数据库操作。

构建ProducerMessage.Message时出现问题,如下所示:

final case class Message[K, V, +PassThrough](
    record: ProducerRecord[K, V],
    passThrough: PassThrough
  )

我可以轻松传递包含实际消息的record参数。但我不知道在passThrough参数中传递什么。根据{{​​3}}:

  

passThrough字段可以包含任何传递的元素   Consumer#flow并包含在Result中。这很有用   当需要在下游操作上传递某些上下文时。   这可以通过解压缩/ zip来完成,但这更方便。它可以   例如,是ConsumerMessage.CommittableOffset或   ConsumerMessage.CommittableOffsetBatch可以在以后提交   在流程中。

在我的情况下,没有任何Kafka消费者订阅Kafka主题并为我的流生成SourcecomittableSourceplainSource)。在这种情况下,我会按照文档中的描述传递消费者偏移量。但就我而言,演员正在模拟这样的消费者。这意味着我无法访问ConsumerMessage.CommittableOffset。那么我在这里传递passThrough参数是什么?在这种情况下,最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

在向reactive-kafka小组转发问题后,我得到了答案。基本上,他们所说的是,如果你没有pass through任何用例,你可以尝试将其设置为 NotUsed ,或者只是空字符串""

另请注意,如果您使用的是Producer.plainSink,则无需构建ProducerMessage.Message。然后,您可以直接构建Kafka ProducerRecordProducerMessage.Message案例类只是需要或需要pass through的案例的容器。除了要传递的元素之外,它只包含一个Kafka ProducerRecord