跨区域事件路由和 Spring Cloud Stream & Spring Cloud 数据流

问题描述

我使用 AWS 作为云提供商。我有一个位于法兰克福地区的微服务,将使用 Spring Cloud Stream (SCDF) Kinesis Adapter 将事件发布到同一地区的 Kinesis Data 流。我在不同地区(俄勒冈州、俄亥俄州、新加坡、孟买等)有多个微服务,它们使用 Spring Cloud Stream (SCDF) Kinesis Adapter 从各个地区的各个 Kinesis Streams 消费事件。现在我必须将法兰克福 Kinesis 中的事件路由到不同区域的不同数据流(仅与相应的 Kinesis 相关)。

  1. 我可以使用 Spring 提供的任何功能来执行此操作吗?是否可以使用 Spring Cloud Stream 或 SCDF 进行跨区域路由?如果是,请指出一些例子。
  2. 如果 #1 是不可能的,那么最好的方法是什么?
  3. 我了解了 AWS EventBridge,它是上述用例的正确选择吗?

解决方法

适用于 AWS Kinesis 的 Spring Cloud Stream Binder 完全基于标准 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(); 
    }

然后您将其绑定到一个 Kinesis 绑定器中的 in 目的地和另一个中的 out 目的地。

另请参阅本文中的其他方法:https://engineering.opsgenie.com/cross-region-replication-of-kinesis-streams-4a62f3bb269d

请参阅 AWS Lambda 的 Spring Cloud 函数支持:https://docs.spring.io/spring-cloud-function/docs/3.1.1/reference/html/aws.html。 Spring Cloud Stream 不为 AWS Lambda 提供绑定器实现。