Реактивная-кафка: почему издатель "идет с" потребителем?
Я посмотрел следующую документацию: 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.consume(ConsumerProperties...)?
1 ответ
Это действительно запутанный случай конфликта терминологии. Reactive-kafka использует Akka Streams, который является реализацией спецификации Reactive Streams.
В этой спецификации Publisher
публикует в поток и Subscriber
получает результаты из потока. Как вы можете видеть, когда вы определяете поток для обработки сообщений Kafka, потребитель Kafka действует как Publisher
потому что это источник сообщений (Source
в терминологии akka-streams). Точно так же производитель Кафки был бы Subscriber
потому что это в конце потока (Sink
в акка-потоках).
Итак, в вашем коде вы определяете Publisher
в ваш поток, который является потребителем Kafka.