0

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

4

1 回答 1

1

这是一个非常令人困惑的术语冲突案例。Reactive-kafka 使用Akka Streams,它是Reactive Streams 规范的实现。

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

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

于 2016-08-30T01:43:10.580 回答