gpt4 book ai didi

go - 如何在多个记录处理器之间平衡运动碎片?

转载 作者:IT王子 更新时间:2023-10-29 02:32:16 26 4
gpt4 key购买 nike

我目前正在编写 Golang 版本的简单 Kinesis 客户端库 (KCL)。我希望我的简单 KCL 具有的功能之一是跨多个记录处理器和 EC2 实例的负载平衡分片。例如,我有两个记录处理器(将在单独的 EC2 实例中运行)和四个 Kinesis 分片。负载平衡功能将允许每个记录处理器处理两个 Kinesis 分片

我读到 Java KCL 实现了这个,但我在库中找不到实现。我的问题是我将如何在 Golang 中实现此功能?谢谢。

最佳答案

KCL 已经为您做了负载平衡。

以下是其目前运作方式的基本描述(请记住,这只是基础知识,随着亚马逊改进逻辑,可能会发生变化):

  • 当工作人员(可能处理多个分片)启动时,它会检查分片归工作人员所有的中央 DynamoDB 数据库(必要时创建该数据库)。这是“租赁”表。
    • “租约”是 worker 和分片之间的关系
    • 工作人员将处理其拥有的未到期租约的分片的记录
    • 如果工作人员在租约到期前(通常每隔几秒)未发出“心跳”,则租约到期 - 此心跳实质上更新 DDB 记录
  • 它检查哪些分片可用的 Kinesis 流,并在需要时更新表
  • 如果任何租约过期,工作人员将尝试取得租约的所有权 - 在数据库级别,使用 shardId 作为键并将它的 workerId 写在那里。
  • 如果一个工作人员启动并且所有分片都已被占用,它会检查“余额”是多少 - 如果它检测到不平衡(即:“我拥有 0 个分片,而其他一些工作人员拥有 10 个分片”),它会启动“窃取分片”协议(protocol)——旧工作人员停止处理该分片,新工作人员开始

您当然可以在 github 上免费检查 KCL 的源代码:https://github.com/awslabs/amazon-kinesis-client - 希望这个解释能为您提供更多背景信息,让您了解如何理解 KCL 并使其适应您的需求。

关于go - 如何在多个记录处理器之间平衡运动碎片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46159268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com