reactive-kafka:为什么发布者 "go with" 消费者?

reactive-kafka: why does publisher "go with" consumer?

我查看了以下文档: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 中的 Consumer 意思恰恰相反,即消费者从 Kafka 读取消息。如果是这样, 'publisher' 与 kafka.consume(ConsumerProperties...) 有什么关系?

这是一个非常令人困惑的术语冲突案例。 Reactive-kafka 使用 Akka Streams, which is an implementation of Reactive Streams specification.

在此规范中,Publisher 发布到流,Subscriber 从流接收结果。如您所见,当您定义用于处理 Kafka 消息的流时,Kafka 消费者充当 Publisher,因为它是消息的来源(akka-streams 术语中的 Source)。同样,Kafka 生产者将是 Subscriber,因为它位于流的末尾(akka-streams 中的 Sink)。

因此,在您的代码中,您为您的流定义了一个 Publisher,它是一个 Kafka 消费者。