当前位置: 首页 > 知识库问答 >
问题:

当我们在运行时增加碎片时,如何保证消息的顺序?

燕涵容
2023-03-14

我不熟悉Kinesis,当我阅读Kinesis文档时,我意识到使用相同分区键的消息将映射到相同的切分以保证顺序。这完全有道理。然而,我想知道,如果我们在运行时增加主题碎片的数量,具有相同分区键的新消息是否会像以前一样散列到相同的碎片(旧的)中?

如果是这样,如果所有消息都提供了分区键,那么它们都不会映射到新的分片怎么办?这对我来说没有意义。

如果没有,那么Kinesis如何保证具有相同分区键的消息的顺序?

共有1个答案

窦弘义
2023-03-14

了解再硬化时的运动功能很重要:

有两种类型的重硬处理操作:碎片拆分和碎片合并。在碎片分割中,将单个碎片分割为两个碎片。在碎片合并中,将两个碎片合并为一个碎片。重排总是成对的,因为在一次操作中不能拆分为两个以上的碎片,在一次操作中也不能合并两个以上的碎片。重硬处理操作作用的碎片或碎片对称为父碎片。重新硬化操作产生的碎片或碎片对称为子碎片。

当您增加运动流的大小时,您将分裂碎片

分割碎片时,请在此范围内指定一个值。该散列键值和所有更高的散列键值被分配给其中一个子碎片。所有较低的哈希键值都分布到另一个子碎片。

实际上,AWS只保证分片级别的订单,因此在拆分后,您需要从分片和消费者端的订单中读取,请参阅此处。

 类似资料:
  • 面试题 如何保证消息的顺序性? 面试官心理分析 其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保证消息是有顺序的?这是生产系统中常见的问题。 面试题剖析 我举个例子,我们以前做过一个 mysql binlog 同步的系统,压力还是非常大的,日同步数据要达到上亿,就是说数据从一个 mysql 库原封不动地同步到另一个 mysql 库里面去(mysql -

  • 我想通过moding user_id来创建用户事件的N个分区N以便用户可以按照发送事件的顺序处理事件。 如果我曾经决定N不足以处理负载,并且希望分别增加分区和使用者的数量,那么在使用用户事件时,我必须做什么来保留事件顺序呢?

  • 主要内容:面试题剖析,解决方案面试题剖析 我举个例子,我们以前做过一个 mysql binlog 同步的系统,压力还是非常大的,日同步数据要达到上亿,就是说数据从一个 mysql 库原封不动地同步到另一个 mysql 库里面去(mysql -> mysql)。常见的一点在于说比如大数据 team,就需要同步一个 mysql 库过来,对公司的业务系统的数据做各种复杂的操作。 你在 mysql 里增删改一条数据,对应出来了增删改

  • 我计划使用AWS FIFO SQS在我的数据存储中记录每个项目的当前状态。我将使用每个项目的唯一标识符作为messageGroupId,以确保对每个项目的消息进行严格排序。 SQS是否确保如果属于特定组的消息在DLQ中,则在DLQ消息被删除或重新驱动回主队列之前,该组的消息对消费者不可见? 例如,可以按顺序接收以下三条消息: 我的轮询器成功地消耗了M1,但无法处理M2。它一直尝试,直到maxRec

  • 然而,顺序是将示例5放在底部,而不是在其正确的位置。在阅读之后,我意识到对象键没有正确排序(按键排序JavaScript对象),并且JSON键不能是整数(按键排序JavaScript对象)。我需要保留对象顺序,而不是自动排序。原因是它的一个ID必须保持不变(所以没有数组替代)。 我是错过了一些简单的东西,还是需要重新思考/工作?

  • 我正在评估用作事件总线的不同流媒体/消息服务。我正在考虑的一个方面是每项服务提供的订购保证。我正在探索的两个选项是AWS Kinesis和Kafka,从较高的层次来看,它们似乎都提供了类似的订购保证,其中记录保证以仅在该碎片/分区中发布的相同顺序使用。 AWS Kinesis API似乎公开了父分片的id,因此使用KCL的消费者组可以确保具有相同分区键的记录可以按照发布顺序(假设是单线程发布者)被