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 消费者。
我查看了以下文档: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 消费者。