Кафка —> Поток данных spring cloud(RabbitMQ) —>> Кафка

#apache-kafka #spring-cloud-stream #spring-cloud-dataflow

Вопрос:

Проблема, с которой я сталкиваюсь, заключается в перемещении данных с помощью spring cloud data flow (SCDF) через среду, чтобы доставить данные в нужное место. ниже представлена ситуация:

  • У меня есть производственная версия Кафки, на которую мне разрешено подписываться только (только для чтения). (кластер из 3 узлов: узел 1:9092,узел 2:9092,узел 3:9092)
  • У меня есть экземпляр SCDF, работающий в кластере Kubernetes, который использует магистраль RabbitMQ (все на одном сервере)
  • У меня есть сервер Кафки с одним узлом, который используется другой компанией для получения данных (защищен ssl).

При взгляде на SCDF я не вижу способа определить Кафку как источник и прочитать в процессор (будет пользовательским) и записать в другой экземпляр Кафки.

Ответ №1:

Вы можете использовать именованное назначение вместе с поддержкой нескольких связующих.

 RabbitMQ Binding -> processor -> named Kafka Destination
 

https://dataflow.spring.io/docs/feature-guides/streams/taps/#tapping-a-stream

В терминах Spring Cloud Stream именованное место назначения-это конкретное имя места назначения в промежуточном программном обеспечении обмена сообщениями или потоковой платформе. Это может быть обмен в RabbitMQ или тема в Apache Kafka. В потоке данных Spring Cloud именованное место назначения может рассматриваться либо как прямой источник, либо как приемник, в зависимости от того, выступает ли оно в качестве издателя или потребителя. Вы можете либо использовать данные из пункта назначения (пример: тема Кафки), либо создавать данные для пункта назначения (например, тема Кафки). Поток данных Spring Cloud позволяет создавать конвейер потоковой передачи событий от и до места назначения в промежуточном программном обеспечении обмена сообщениями с помощью поддержки именованного места назначения.

 http > :user-click-events

:user-click-events > jdbc
 

https://docs.spring.io/spring-cloud-stream/docs/3.1.3/reference/html/spring-cloud-stream.html#multiple-binders

Если в пути к классу присутствует несколько связующих, приложение должно указать, какое связующее должно использоваться для каждой целевой привязки.

Так:

 :RO_Kafka > processor_1 | ... | processor_n > :otherKafka
 

С processor_1 processor_n несколькими связующими и сконфигурированными с ними.