yin*_*ang 9 java amazon-kinesis amazon-kinesis-kpl
场景是我将向 kinesis 流写入大量数据(每天 TB 级)。我想知道哪种方法是实现高写入吞吐量的更好方法。我正在为生产者客户考虑以下两种选择。
选项 1:使用 Kinesis 生产者库 (KPL)。
或者
选项 2:AWS 开发工具包 (api)。
我知道 KPL 是在 aws sdk 之上使用的抽象,所以它基本上归结为(KPL with AWS-SDK)或只是 AWS-SDK。根据我的研究,在我看来,AWS-SDK 不提供将多条记录聚合到单个 put 中的能力,而 KPL 确实支持这种聚合(如果这是错误的,请纠正我)。
PutRecords(来自 Kinesis Data Streams API)和 KPL(使用聚合)都提供了高写入吞吐量,问题是这两个选项中哪个更好,为什么?简而言之,有兴趣知道在将数据写入 kinesis 流方面哪个会更快,一旦将其写入流,我就不关心它是如何读取的。也有兴趣了解两种情况下的重试机制差异和异步写入性能。
小智 2
是的,所以 SDK 和 KPL 之间有两个主要区别。首先,SDK 同步发送记录,没有延迟,而 KPL 允许批处理(聚合和收集),这是以由 确定的一些延迟为代价的RecordMaxBufferedTime,这有助于最大限度地提高效率和吞吐量。其次,对于 KPL,您需要使用 Java 进行部署,而 SDK 允许使用 CLI 或 Boto3 库,它使用 SDK 来帮助调用 python 或其他编程语言中的 API。请参阅
API 参考。
如果您的方法与语言无关并且没有一点延迟的问题,请选择 KPL。但是,如果您希望通信保持同步,请使用 API 并选择您喜欢的任何语言。
总之,SDK 是基本操作,而 KPL 是建立在其之上的,其中包括为您准备的批处理/聚合/重试功能。因此,与 SDK 相比,KPL 具有更高的延迟,因为它具有更多内置功能。