我查看了下面的文档: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()
))
我理解'publisher'应该写消息给Kafka。然而,Kafka中的消费者的意思正好相反,意味着消费者从Kafka读取消息。如果是这样,"publisher"与kafka.consume(ConsumerProperties…)有什么关系?
这是一个非常令人困惑的术语冲突案例。Reactive-kafka使用Akka Streams,这是一个响应式流规范的实现。
在本规范中,Publisher
向流发布结果,Subscriber
从流接收结果。正如你所看到的,当你定义一个流来处理Kafka消息时,Kafka消费者充当Publisher
,因为它是消息的来源(在akka-streams术语中是Source
)。类似地,Kafka生产者将是一个Subscriber
,因为它位于流的末尾(akka-streams中的Sink
)。
所以在你的代码中你定义了一个Publisher
到你的流,它是一个Kafka消费者。