每天都会有数十亿条信息。
我们正在寻找一个实现,使我们能够将消息准确地用传递到--一次保证。
我们的生产者框架要求流接收器是幂等的,为准确的一次交付保证,而Kinesis不是。所以我们得到的-至少一次目前交付。(复制是可能的,我们确实看到了,当流微批必须重新启动时,无论出于何种原因,生产者一方)
我们开始研究(KPL) 回调函数。基本上,我们将根据每个消息中存在的密钥来跟踪传递了什么消息和在DynamoDB中没有发送什么消息的状态。如果我们知道一条消息已经发送了,我们将跳过它以重新发送。那么,似乎正是-一次是可能的。有两个问题--
1)我们唯一的问题--我们有多大可能会失去对回调函数的调用(例如,网络故障等),或者回调函数本身已经失败(例如,我们遇到了DynamoDB限制/中断等)--这是否有文档记载?我知道机会不高,但我们想要设计一个系统,以适应这些预期的事情。
2)时间安排。假设出于任何原因,Kinesis调用了带有延迟的回调函数(5-15毫秒将足以打破上述在DynamoDB中持续传递状态的回调函数中的一些假设)。虽然我们还没有收到有关交付的确认,但我们的流媒体生产商框架已经尝试了重发,但它认为还没有交付。有什么解决这个潜在问题的办法吗?
ps。我们知道解决这个问题的一种方法是在应用程序端(从那个动态流接收端)进行our,但是这不在我们的项目范围之内,而且我们有一个很难达到的要求--一次进入那个kinesis流。
https://stackoverflow.com/questions/60494744
复制相似问题