我查看了以下文档:https://github.com/akka/reactive-kafka,我看到了以下代码段:
implicit val actorSystem = ActorSystem("ReactiveKafka")
implicit val materializer = ActorMaterializer()
val kafka = new ReactiveKafka()
val publisher: Publisher[StringConsumerRecord] = kafka.consume(ConsumerProperties(
bootstrapServers = "localhost:9092",
topic = "lowercaseStrings",
groupId = "groupName",
valueDeserializer = new StringDeserializer()
))
我理解'出版商'应该写给Kafka的消息。然而,卡夫卡的消费者意味着完全相反,意味着消费者从卡夫卡读取消息。如果是这样,那么'出版商'与kafka.consume(ConsumerProperties ...)有关?
答案 0 :(得分:1)
这是一个非常令人困惑的术语碰撞案例。 Reactive-kafka使用Akka Streams,这是Reactive Streams specification的实现。
在此规范中,Publisher
发布到流,Subscriber
从流中接收结果。正如您所看到的,当您定义用于处理Kafka消息的流时,Kafka使用者充当Publisher
,因为它是消息的来源(akka-streams术语中的Source
)。类似地,Kafka生成器将是Subscriber
,因为它位于流的末尾(akka-streams中的Sink
)。
因此,在您的代码中,您为流是Kafka消费者定义了Publisher
。