我正在使用 TransferManager 将文件上传到我的s3 存储桶。虽然文档说尽可能重用一个实例,但它也说一旦传输完成就应该调用关闭。
文档的相关部分:
TransferManager 负责管理连接、线程等资源;尽可能共享 TransferManager 的单个实例。TransferManager 与适用于 Java 的 AWS 开发工具包中的所有客户端类一样,是线程安全的。传输完成后调用 TransferManager.shutdownNow() 释放资源。
这是从字面上理解的,还是我们可以重用对象并在应用程序关闭时调用关闭?
一点背景知识:我们之前使用相同的 s3 客户端为每次上传创建一个 TransactionManager,但我们开始AbortedException
在某些上传时遇到问题。
我们正在使用kafka 0.10.2.1。该文档指定了即使缓冲区未满也可以发送的缓冲区。
默认情况下,即使缓冲区中还有其他未使用的空间,缓冲区也可以立即发送。但是,如果要减少请求数,可以将linger.ms设置为大于0的值。
但是,它也表示即使延迟时间设置为0ms,生产者也将尝试批处理请求-
请注意,时间紧靠的记录通常即使linger.ms = 0也将一起批处理,因此在高负载下将进行批处理,而与linger配置无关。但是,如果不将其设置为大于0的值,则在未处于最大负载的情况下,可能会导致更少的请求和更有效的请求,但以少量的等待时间为代价。
凭直觉,似乎任何种类的批处理都需要一些延迟时间,而使延迟时间为0的唯一方法是使代理呼叫同步。显然,将延迟时间保持为0似乎并不会像阻塞发送呼叫那样对性能造成太大影响,但似乎会对性能产生一些影响。有人可以澄清上面的文档怎么说吗?
通常,当文件必须上传到s3时,必须先将其写入磁盘,然后再使用TransferManager api之类的文件上传到云。如果上传未按时完成,则会导致数据丢失(应用程序关闭并在其他服务器上重启等)。因此,我想知道是否可以通过所需的云位置作为接收器直接通过网络写入流。