TRIM_HORIZON和LATEST的区别

51
在正式的AWS Kinesis文档中,我找不到TRIM_HORIZON和检查点之间的任何明确参考,也没有LATEST和检查点之间的任何参考。请问您是否可以确认我的理论:
  • TRIM_HORIZON - 如果应用程序名称是新的,则会读取流中所有可用的记录。否则,如果应用程序名称已经被使用,则会从我的上一个检查点开始读取。

  • LATEST - 如果应用程序名称是新的,则会读取流中订阅之后添加的所有记录。否则,如果应用程序名称已经被使用,则会从我的上一个检查点开始读取。

  • TRIM_HORIZONLATEST的区别只在于应用程序名称是否为新的。


2
这两个答案都没有清楚地说明这是否仅在您首次创建源映射时有影响,还是在稳定状态下使用 LATEST 会丢失数据。 - iamprem
1
真正的问题应该是如何在Kinesis中丢失数据。 - John Mercier
有人能告诉我application-name指的是什么吗?我在网上找不到任何关于kinesis触发器的相关信息。 - undefined
4个回答

31
AT_TIMESTAMP -- 从特定时间戳开始
TRIM_HORIZON -- 从Kinesis流的开头获取所有可用的消息(与Kafka中的最早消息相同)
LATEST -- 从最新的消息开始,即刚刚进入Kinesis/Kafka的当前消息以及从那时起的所有传入消息

2
“从最新的消息”是什么意思?逆序排列?你能详细说明一下吗? - Kirk Broadhurst
2
现在开始跳过信息并向前移动(流式数据是不断接收新数据的想法,您可以利用此作为补偿机制,但会有数据丢失)。 - Krease
2
最新的消息是指刚刚进入Kinesis的当前消息。因此,消费者开始从该消息和任何未来进入Kinesis的消息中消费消息。 - Suresh
1
@Krease,当您提到数据丢失的成本时,是指仅在最初设置事件源映射时发生,还是如果您将过多的数据推入Dynamo / Kinesis并且Lambda处理缓慢,只选择跳过进入流的未处理记录以获取最新记录,那么数据丢失是否会在此之后发生? - iamprem
@iamprem - 这只是一种跳过记录的机制 - 比如你的处理已经落后了很久(一个小时),你可以跳过那个小时(失去记录)并开始处理更新的记录。这在数据时效性比数据完整性更为重要的情况下最有用。 - Krease

19

根据我的使用经验,从GetShardIterator文档中得知:

在请求中,您可以指定分片迭代器类型AT_TIMESTAMP,以从任意时间点读取记录,TRIM_HORIZON会使ShardIterator指向系统中该分片中未修剪的最后一条记录(分片中最旧的数据记录),或者LATEST,以便始终读取该分片中最新的数据。

基本上,这三种选项的区别在于您想要从最旧的记录(TRIM_HORIZON)开始还是从“现在”(LATEST)开始 - 在后者情况下将跳过最新检查点和现在之间的数据。


1
这似乎是不正确的。TRIM_HORIZON 将读取最旧的记录,无论其是否“已处理”。 - Kirk Broadhurst

4
问题明确要求说明这些选项与检查点的关系。然而,现有的答案都没有涉及检查点。
此问题的权威答案由Justin Pfifer在GitHub问题中提供,点击这里进行查看。
最相关的部分是:
KCL将始终使用租约表中的值(如果存在)。重要的是要记住,Kinesis本身不会跟踪消费者的位置。跟踪由租约表提供。 KCL服务器上的租约兼顾了双重任务:它们既提供互斥,又提供位置跟踪。因此,为实现互斥,需要创建租约;为满足位置跟踪,则必须选择初始值。
(我加重了重点。)

2
来自前面提到的最佳答案。 - Mitrakov Artem

0

我认为在两者之间做出选择是一个权衡,你想从最新的数据开始还是想从kinesis中尚未处理的最旧数据开始。

想象一下这样的情况:当您的lambda函数存在错误并且在获取第一条记录时抛出异常,并将错误返回到kinesis时,现在您的kinesis中的所有记录都不会被处理,并将保留1天的时间(保留期)。现在,在您修复了该错误并部署了您的lambda之后,您的lambda将开始获取kinesis一直持有的所有那些消息。现在,您的下游服务将不得不处理旧数据而不是最新数据。如果您选择TRIM_HIROZON,则可能会增加应用程序中不需要的延迟。

但是,如果您使用LATEST,则可以忽略所有以前卡住的消息,并使您的lambda实际上从新事件/消息开始处理,从而提高系统提供的延迟。

因此,您必须决定哪个对于您的客户更重要。失去一些数据点是否可以接受,您的容错限制是什么,或者您是否始终希望获得准确的结果,例如计算总和/计数器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接