代码之家  ›  专栏  ›  技术社区  ›  SuSanD

如何在KCL中重新排序异步发送的Kinesis事件

  •  0
  • SuSanD  · 技术社区  · 9 年前

    我正在开发一个使用Kinesis客户端库(KCL)从AWS Kinesis流读取和处理事件的应用程序。我不希望事件生成方遭受延迟,因此KinesisAsyncClient用于发送事件。然而,为了让我的事件处理正常工作,我需要在生产者端以“我调用putRecordAsync的顺序”处理偶数。此信息可作为每个Kinesis记录中的时间戳字段使用。

    除了切换到使用阻塞同步Kinesis客户端之外,还有其他可能有效排序流事件的解决方案吗?

    1 回复  |  直到 9 年前
        1
  •  0
  •   Krease    8 年前

    如果订购很重要 使用异步客户端。

    异步客户端只是在后台使用一个线程池来进行完全相同的调用-因为它是多线程的,所以无法保证这些线程的执行顺序,因此,您无法控制Kinesis接收这些记录的顺序。

    现在,如果延迟对您的制作人来说真的是一个问题:

    1. 如果可能,请确保您正在调用PutRecords(而不是PutRecord)-这肯定会为您节省一些网络往返时间。

    2. 与其直接调用客户端,不如将有序记录放入本地队列,并使用后台线程定期从该队列轮询以调用PutRecords。

    要记住的其他一些事情-如果这不够快,无法使进程内队列接近空,则表明您有足够大的数据吞吐量,需要多个线程来放置数据,并且不再有精确的顺序。如果是这样,我强烈建议提供 序号 这样,如果有必要,您可以在消费者方面对记录进行重新排序(在这种情况下,也可以将SQS作为起点,而不是Kinesis)