问题描述
我使用 AWS 作为云提供商。我有一个位于法兰克福地区的微服务,将使用 Spring Cloud Stream (SCDF) Kinesis Adapter 将事件发布到同一地区的 Kinesis Data 流。我在不同地区(俄勒冈州、俄亥俄州、新加坡、孟买等)有多个微服务,它们使用 Spring Cloud Stream (SCDF) Kinesis Adapter 从各个地区的各个 Kinesis Streams 消费事件。现在我必须将法兰克福 Kinesis 中的事件路由到不同区域的不同数据流(仅与相应的 Kinesis 相关)。
- 我可以使用 Spring 提供的任何功能来执行此操作吗?是否可以使用 Spring Cloud Stream 或 SCDF 进行跨区域路由?如果是,请指出一些例子。
- 如果 #1 是不可能的,那么最好的方法是什么?
- 我了解了 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 提供绑定器实现。