Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何对KCL内异步发送的Kinesis事件重新排序_Amazon Web Services_Amazon Kinesis - Fatal编程技术网

Amazon web services 如何对KCL内异步发送的Kinesis事件重新排序

Amazon web services 如何对KCL内异步发送的Kinesis事件重新排序,amazon-web-services,amazon-kinesis,Amazon Web Services,Amazon Kinesis,我正在开发一个应用程序,该应用程序使用Kinesis客户端库(KCL)从AWS Kinesis流读取和处理事件。我不希望事件生成器端遭受延迟,因此使用KinesisAsyncClient发送事件。但是,为了使事件处理正常工作,我需要在生产者端按照“我调用putRecordAsync的顺序”处理even。此信息在每个动觉记录中作为时间戳字段提供 除了切换到使用阻塞同步Kinesis客户端之外,还有其他解决方案可以有效地对流媒体事件进行排序吗?如果排序很重要,请不要使用异步客户端 异步客户机只是在后

我正在开发一个应用程序,该应用程序使用Kinesis客户端库(KCL)从AWS Kinesis流读取和处理事件。我不希望事件生成器端遭受延迟,因此使用KinesisAsyncClient发送事件。但是,为了使事件处理正常工作,我需要在生产者端按照“我调用putRecordAsync的顺序”处理even。此信息在每个动觉记录中作为时间戳字段提供


除了切换到使用阻塞同步Kinesis客户端之外,还有其他解决方案可以有效地对流媒体事件进行排序吗?

如果排序很重要,请不要使用异步客户端

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

现在,如果延迟确实是制作人的问题:

  • 尽可能确保您正在调用PutRecords(而不是PutRecord)——这肯定会为您节省一些网络往返

  • 与其直接调用客户机,不如将顺序记录放入本地队列,并使用后台线程定期从该队列轮询以调用顺序记录


  • 要记住的其他一些事情-如果这不够快,无法使进程内队列接近于空,则表明您有足够大的数据吞吐量,需要多个线程来放置数据,并且不再具有精确的顺序。如果是这样的话,我强烈建议用你的记录提供<强>序列号< /强>,这样你就可以在需要时在消费者方面重新排序它们(也把SQL作为起点,而不是在那种情况下的KEXIX)

    读者将按照流中的顺序获得事件。您只能从生产者端控制事件的顺序。您可以使用putRecords(注意s),它将多个事件按顺序排列。您还可以使用上一个事件的seq id将下一个事件放在后面。这对你有意义吗?@Guy使用Kinesis的异步客户端putRecordsAync也能保证事件的顺序吗?使用PutRecords(同步或异步)对Kinesis的API调用保持了调用负载中事件的顺序。如果你在客户端代码中进行额外的批处理以创建不同的API调用,这些事件可能与您在多次调用中调用异步的顺序不同。