首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生产厂家回叫功能-保证交付?

生产厂家回叫功能-保证交付?
EN

Stack Overflow用户
提问于 2020-03-02 18:37:00
回答 1查看 190关注 0票数 1

每天都会有数十亿条信息。

我们正在寻找一个实现,使我们能够将消息准确地用传递到--一次保证。

我们的生产者框架要求流接收器是幂等的,为准确的一次交付保证,而Kinesis不是。所以我们得到的-至少一次目前交付。(复制是可能的,我们确实看到了,当流微批必须重新启动时,无论出于何种原因,生产者一方)

我们开始研究(KPL) 回调函数。基本上,我们将根据每个消息中存在的密钥来跟踪传递了什么消息和在DynamoDB中没有发送什么消息的状态。如果我们知道一条消息已经发送了,我们将跳过它以重新发送。那么,似乎正是-一次是可能的。有两个问题--

1)我们唯一的问题--我们有多大可能会失去对回调函数的调用(例如,网络故障等),或者回调函数本身已经失败(例如,我们遇到了DynamoDB限制/中断等)--这是否有文档记载?我知道机会不高,但我们想要设计一个系统,以适应这些预期的事情。

2)时间安排。假设出于任何原因,Kinesis调用了带有延迟的回调函数(5-15毫秒将足以打破上述在DynamoDB中持续传递状态的回调函数中的一些假设)。虽然我们还没有收到有关交付的确认,但我们的流媒体生产商框架已经尝试了重发,但它认为还没有交付。有什么解决这个潜在问题的办法吗?

ps。我们知道解决这个问题的一种方法是在应用程序端(从那个动态流接收端)进行our,但是这不在我们的项目范围之内,而且我们有一个很难达到的要求--一次进入那个kinesis流。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-02 18:47:48

对于#1,无论走哪条路,您都会发现自己处于边缘情况,可能导致数据丢失或重复调用。即使在这里使用两阶段提交协议也不起作用,如果使用者没有参与该协议。

对于#2,Kinesis是有序的,所以如果您确实得到了副本,您应该能够可靠地假设它们在同一个碎片上,因此在另一个阅读器仍在处理时不会处理(假设每个碎片有一个读取器)。只需确保在调用强一致读时使用的是DynamoDB。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60494744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档