Маршрутизация межрегиональных событий и Spring Cloud Stream и Spring Cloud Data Flow

Я использую AWS в качестве облачного провайдера. У меня есть микросервис, который находится во Франкфурте, и я буду публиковать события в потоке данных Kinesis в том же регионе с помощью адаптера Spring Cloud Stream (SCDF) Kinesis. У меня есть несколько микросервисов в разных регионах (Орегон, Огайо, Сингапур, Мумбаи и т. д.), которые используют события из соответствующих потоков Kinesis в соответствующих регионах с помощью адаптера Spring Cloud Stream (SCDF) Kinesis. Теперь мне нужно направить события, которые есть во Франкфуртском Kinesis, в разные потоки данных в разных регионах (только связанные с соответствующим Kinesis).

  1. Могу ли я сделать это, используя любую из функций Spring? Могу ли я использовать Spring Cloud Stream или SCDF для межрегиональной маршрутизации? если да, укажите несколько примеров.
  2. Если # 1 невозможно, каковы наилучшие способы сделать это?
  3. Я читал об AWS EventBridge, правильный ли это выбор для описанного выше варианта использования?



Ответы (1)


Spring Cloud Stream Binder для AWS Kinesis полностью основан на стандартном клиенте AWS или KCL. Оба они требуют, чтобы определенные region были настроены статически или разрешены из среды EC2. Таким образом, чтобы иметь возможность потреблять из одного региона и ретранслировать записи потока в другой, вы должны закодировать некоторое приложение потока репликатора.

К счастью, приложение Spring Cloud Stream можно настроить для нескольких биндеров. Правильно, в нашем случае они оба будут одним и тем же связующим Kinesis, но мы собираемся настроить их для разных учетных данных и разных регионов.

См. документацию Spring Cloud Stream для настройки нескольких подшивок: https://docs.spring.io/spring-cloud-stream/docs/3.1.2/reference/html/spring-cloud-stream.html#multiple-binders.

Вероятно, код вашего потокового приложения может быть простой функцией идентификации:

    @Bean
    public Function<byte[], byte[]> kinesisStreamRelay() {
        return Function.identity(); 
    }

И вы привязываете его к in адресату из одного переплета Kinesis и out адресату из другого.

Также см. другие способы сделать это в этой статье: https://engineering.opsgenie.com/cross-region-replication-of-kinesis-streams-4a62f3bb269d

См. раздел Поддержка Spring Cloud Function для AWS Lambda: https://docs.spring.io/spring-cloud-function/docs/3.1.1/reference/html/aws.html. Spring Cloud Stream не предоставляет реализацию связывателя для AWS Lambda.

person Artem Bilan    schedule 12.05.2021
comment
Спасибо Артем за предложения и советы. Не могли бы вы поделиться примером для вышеупомянутой функции идентификации или ссылки. Здесь источник (в связующем) один, а место назначения (внешнее связующее) несколько, поэтому использование подхода Spring с несколькими связующими может не работать. Есть ли у вас какие-либо идеи по использованию AWS EventBridge вместо решения Sping Kinesis? - person user3792889; 23.05.2021