Реактивная-кафка: почему издатель "идет с" потребителем?

Я посмотрел следующую документацию: 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.

Другие вопросы по тегам