我正在将IgniteDataStreamer
与allowOverwrite
一起用于加载连续数据。
问题1
从javadoc:
请注意,流媒体将通过多个内部线程并发传输数据,因此数据可能以与添加到流媒体的顺序不同的顺序到达远程节点。
在我的情况下,重新排序是不可接受的。 perNodeParallelOperations
设置为1
是否可以保证保持addData
调用的顺序? IgniteDataStreamer
同时加载了许多缓存,因此无论如何都将使用Ignite服务器节点线程。
问题2。
由于GC暂停,我的流式应用程序可能会挂起几秒钟。我想避免此时缓存加载暂停,并保持较高的平均缓存写入速度。是否有可能将IgniteDataStreamer
配置为在服务器节点上保留(绑定)传入批处理队列,而在流式传输(客户端)应用程序挂起时会消耗这些队列?请参阅问题1,应按顺序使用队列。可以利用一些堆是可以的。
问题3。perNodeBufferSize
javadoc:
此设置控制在将缓冲的数据发送到远程节点之前内部每个节点的缓冲区的大小
根据javadoc,数据传输由tryFlush
/ flush
/ autoFlush
触发,那么它与perNodeBufferSize
限制有何关系?如果少于perNodeBufferSize
消息(是否希望),刷新是否会被忽略?
最佳答案
我不建议尝试避免在DataStreamer
中重新排序,但是如果您确实需要这样做,则还需要在服务器节点上将数据流池池大小设置为1。如果更大,则数据将被拆分为条带,并且不会按顺序发送。
DataStreamer专为吞吐量而不是延迟而设计。因此,您在这里没有多少可以做的。也许增加perThreadBufferSize
?
当任何条带达到perThreadBufferSize时,数据传输将自动开始。