运动数据流消费者的高可用性

时间:2019-05-20 10:20:25

标签: amazon-web-services failover availability kinesis

我想在数据发送方面采用以下架构。

  

生产者-> Kinesis数据流->消费者

可以关闭消费服务器,因此我认为应该至少有2个消费服务器。 是吗?

当一个数据流有两个使用者时,是否有任何方法可以处理每个使用者一半的数据?据我所知,这是不可能的。 如果每个消费者使用相同的数据,那将浪费时间和成本。 因为我只为2个消费者提供高可用性。 (用于故障转移)

在网络架构中, 通过负载平衡,ELB或L4可以帮助向每个服务器发送一半的数据。

我想知道运动学数据流的类似方法。

1 个答案:

答案 0 :(得分:0)

  

当一个数据流有两个使用者时,有什么方法可以   每个消费者处理一半的数据?据我所知,这是不可能的。

你错了。

您应该经历Kinesis Developer guide或更具体地说https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-scaling.html

运动学流由1个或多个碎片组成。每个分片可以是 独立处理。

引用以上链接中的示例

  

以下示例说明了KCL如何帮助您进行扩展   和重新分片:

     

例如,如果您的应用程序在一个EC2实例上运行,并且   正在处理一个包含四个分片的Kinesis数据流。这个   实例有一个KCL工作程序和四个记录处理器(一个记录   每个碎片的处理器)。这四个记录处理器运行在   在同一过程中并行进行。

     

接下来,如果您扩展应用程序以使用另一个实例,则可以   两个实例处理一个具有四个分片的流。当KCL   worker在第二个实例上启动,它与   第一个实例,因此每个实例现在都可以处理两个分片。

     

如果您随后决定将四个碎片分成五个碎片。 KCL   再次协调跨实例的处理:一个实例   处理三个分片,另一个处理两个分片。一个相似的   合并碎片时会发生协调。

您只需要确保两个Kinesis Consumer应用程序(在不同的计算机上运行)都配置了相同的应用程序名称。 KCL会将应用程序名称,分片检查点作为Dynamo DB表进行跟踪。此dynamo db表还用于定义使用者应用程序之间的分片所有权。

因此,如果您的Kinesis Stream具有4个分片和两个在不同计算机上运行的消费者应用程序。然后分片平衡将通过以下方式完成。

----Shard1---> application-instance-1
----Shard2---> application-instance-1
----Shard3---> application-instance-2
----Shard4---> application-instance-2

假设application-instance-1掉线了。然后application-instance-2将开始处理所有分片。

----Shard1---> application-instance-2
----Shard2---> application-instance-2
----Shard3---> application-instance-2
----Shard4---> application-instance-2