我正在使用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主题并为我的流生成Source
(comittableSource
或plainSource
)。在这种情况下,我会按照文档中的描述传递消费者偏移量。但就我而言,演员正在模拟这样的消费者。这意味着我无法访问ConsumerMessage.CommittableOffset
。那么我在这里传递passThrough
参数是什么?在这种情况下,最佳做法是什么?
答案 0 :(得分:0)
在向reactive-kafka
小组转发问题后,我得到了答案。基本上,他们所说的是,如果你没有pass through
任何用例,你可以尝试将其设置为无或 NotUsed ,或者只是空字符串"" 。
另请注意,如果您使用的是Producer.plainSink
,则无需构建ProducerMessage.Message
。然后,您可以直接构建Kafka ProducerRecord
。
ProducerMessage.Message
案例类只是需要或需要pass through
的案例的容器。除了要传递的元素之外,它只包含一个Kafka ProducerRecord
。