KCL 检查点对于 application/shard 或整个分片来说是唯一的吗?
Is the KCL checkpoint unique for an application/shard or the whole shard?
给定一个具有多个分片的流,我假设每个应用程序都会通过 Kinesis Client Library,在从此流处理的记录上维护自己的检查点。但是,我发现很难找到阅读 AWS 上的文档是否属于这种情况。
我的问题是,如果我有两个 Kinesis 应用程序使用 KCL 连接到同一个流,它们是否会共享同一个检查点以处理已处理的记录?他们可以独立处理彼此的记录吗?
为了使事件处理具有可扩展性和简单性,最好保留以下内容:
- 每个工作实例正在处理一个分片
- 每个工作逻辑在不同的消费者应用程序中实现
如果您保留这些最佳实践,您的事件处理将变得更加敏捷和可扩展。
如果您将工作实例与分片的比率保持在 1:1,则扩展会更容易,因为您只需添加分片(即拆分现有分片并将分片容量加倍),并且每个工作实例都会只处理相同数量的事件(例如,每秒 1000 个事件)。 KCL 将为每个新分片添加一个工作实例。
您也可以自由修改一种类型的逻辑,而不更改其他逻辑。例如,如果你想对"replay"事件稍微修改一下逻辑进行处理,其余的逻辑就不必重复处理了。最简单的逻辑拆分是 "Slow" 处理(例如,放入 S3 并复制到 Redshift)和 "Fast" 处理(实时检查事件以更新计数器或识别欺诈以立即阻止,例如)。 KCL 将为每种类型的此类处理添加一个应用程序。
简而言之,KCL 将帮助您维护每个应用程序和每个分片的处理(检查点)状态。例如,如果您的流中有 3 个消费者逻辑和 8 个分片,您将有 3*8=24 个检查点。
给定一个具有多个分片的流,我假设每个应用程序都会通过 Kinesis Client Library,在从此流处理的记录上维护自己的检查点。但是,我发现很难找到阅读 AWS 上的文档是否属于这种情况。
我的问题是,如果我有两个 Kinesis 应用程序使用 KCL 连接到同一个流,它们是否会共享同一个检查点以处理已处理的记录?他们可以独立处理彼此的记录吗?
为了使事件处理具有可扩展性和简单性,最好保留以下内容:
- 每个工作实例正在处理一个分片
- 每个工作逻辑在不同的消费者应用程序中实现
如果您保留这些最佳实践,您的事件处理将变得更加敏捷和可扩展。
如果您将工作实例与分片的比率保持在 1:1,则扩展会更容易,因为您只需添加分片(即拆分现有分片并将分片容量加倍),并且每个工作实例都会只处理相同数量的事件(例如,每秒 1000 个事件)。 KCL 将为每个新分片添加一个工作实例。
您也可以自由修改一种类型的逻辑,而不更改其他逻辑。例如,如果你想对"replay"事件稍微修改一下逻辑进行处理,其余的逻辑就不必重复处理了。最简单的逻辑拆分是 "Slow" 处理(例如,放入 S3 并复制到 Redshift)和 "Fast" 处理(实时检查事件以更新计数器或识别欺诈以立即阻止,例如)。 KCL 将为每种类型的此类处理添加一个应用程序。
简而言之,KCL 将帮助您维护每个应用程序和每个分片的处理(检查点)状态。例如,如果您的流中有 3 个消费者逻辑和 8 个分片,您将有 3*8=24 个检查点。