java - 了解IgniteDataStreamer : ordering and buffering

标签 java ignite gridgain

我使用 IgniteDataStreamerallowOverwrite 来加载连续数据。

问题1。 来自javadoc:

Note that streamer will stream data concurrently by multiple internal threads, so the data may get to remote nodes in different order from which it was added to the streamer.

就我而言,重新排序是 Not Acceptable 。 perNodeParallelOperations 设置为 1 能否保证保持 addData 调用的顺序? IgniteDataStreamer 同时加载多个缓存,因此 Ignite 服务器节点线程无论如何都会被利用。

问题2。 由于 GC 暂停,我的流应用程序可能会挂起几秒钟。我想避免此时的缓存加载暂停并保持较高的平均缓存写入速度。是否可以配置IgniteDataStreamer以在服务器节点上保留(有界)传入批处理的队列,该队列将在流(客户端)应用程序挂起时消耗?参见问题1,队列应该按顺序消费。可以使用一些堆来实现它。

问题3。 perNodeBufferSize javadoc:

This setting controls the size of internal per-node buffer before buffered data is sent to remote node

根据javadoc,数据传输是由tryFlush/flush/autoFlush触发的,那么它与perNodeBufferSize<有什么关系?/ 限制?如果少于 perNodeBufferSize 消息,flush 会被忽略吗(我希望不会)?

最佳答案

我不建议尝试避免在 DataStreamer 中重新排序,但如果您确实需要这样做,则还需要将数据流媒体池大小设置为 1在服务器节点上。如果它较大,则数据将被分成 strip ,而不是按顺序发送。

DataStreamer 专为吞吐量而非延迟而设计。所以你在这里无能为力。也许增加perThreadBufferSize

当任何 strip 达到 perThreadBufferSize 时,数据传输将自动开始。

关于java - 了解IgniteDataStreamer : ordering and buffering,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58226474/

相关文章:

java - 从 session Java 访问数组

java - 如何将json对象日期解析为Android

java - Ignite 线程池使用 - 如何正确地将数据并行放入缓存中?

java - 在 Debug模式下启动 GridGain

java - 从 MS Exchange 检索附件的最佳方式

java - 无法调试 intellij 插件 - 初始堆大小无效

java - 阻止 ignite 在调用 setter 时更新缓存

java - Apache 点燃: make clients to go to Ignite server on local machine instead of any machine in cluster

hadoop - GridGain Hadoop加速器:Jobtracker不在Hadoop集群中启动

java - 找不到映射描述。请配置 JdbcType 将缓存 'PersonCache' 与 JdbcPojoStore 关联 ERROR