gpt4 book ai didi

mysql - 如何在将记录异步放入运动流时确保顺序?

转载 作者:可可西里 更新时间:2023-11-01 07:57:59 24 4
gpt4 key购买 nike

我正在编写一个应用程序,它读取 MySQL bin 日志并将更改推送到 Kinesis 流中。我的用例需要在 kinesis 流中对 mysql 事件进行完美排序,为此我使用了 putrecord 操作而不是 putrecords 并且还包括 ' SequenceNumberForOrdering' 键。但是仍然存在一个失败点,即重试逻辑。作为一个 async 函数(使用 aws 的 js sdk),我如何确保在对 kinesis 的写入操作失败时的顺序。

阻塞写入(阻塞事件循环直到接收到放置记录的回调)是不是太糟糕的解决方案?或者有更好的方法吗?

最佳答案

与其在向流中添加记录时尝试强制排序,不如在读取记录时对记录进行排序。在您的用例中,每个二进制日志条目都有一个唯一的文件序列、起始位置和结束位置。因此,订购它们并找出任何差距是微不足道的。

如果您在阅读时确实发现了空白,消费者将不得不等到他们被填满。但是,假设没有灾难性故障,流中的所有记录都应该彼此靠近,因此缓冲量应该是最小的。

通过在生产者端强制执行排序,您将整体吞吐量限制为写入单个记录的速度。如果您能跟上实际的数据库更改,那没关系。但是,如果您不能跟上,即使消费者可能负载很轻,您也会在管道中遇到越来越大的滞后。

此外,您只能在单个分片内强制执行顺序,因此如果您的生产者需要摄取超过 1 MB/秒(或 > 1,000 条记录/秒),那您就不走运了(根据我的经验,唯一达到 1,000 条记录/秒的方法是通过 PutRecords;如果您一次写入一条记录,您将获得大约 20-30 个请求/秒。

关于mysql - 如何在将记录异步放入运动流时确保顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47138841/

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