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

问题描述 投票:0回答:1

我想在下面的结构中进行数据发送。

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

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

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

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

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

amazon-web-services failover availability kinesis
1个回答
0
投票

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

您错了。

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

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

从以上链接引用示例,

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

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

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

如果您随后决定将四个碎片分成五个碎片。 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
© www.soinside.com 2019 - 2024. All rights reserved.