解决办法:kudu-client 版本使用1.5以上的版本
AUTO_FLUSH_BACKGROUND:异步刷新可能会导致写入的时候乱序,因此有严格的顺序的写入操作可能要使用AUTO_FLUSH_SYNC模式 具体说明如下: /** * Each {@link KuduSession#apply KuduSession.apply()} call will return only after being * flushed to the server automatically. No batching will occur. * * <p>In this mode, the {@link KuduSession#flush} call never has any effect, since each * {@link KuduSession#apply KuduSession.apply()} has already flushed the buffer before * returning. * * <p><strong>This is the default flush mode.</strong> * 使用该模式的时候调用apply以后就直接flush,不回有批量flush的情况,该模式为默认模式 */ AUTO_FLUSH_SYNC, /** * {@link KuduSession#apply KuduSession.apply()} calls will return immediately, but the writes * will be sent in the background, potentially batched together with other writes from * the same session. If there is not sufficient buffer space, then * {@link KuduSession#apply KuduSession.apply()} may block for buffer space to be available. * * <p>Because writes are applied in the background, any errors will be stored * in a session-local buffer. Call {@link #countPendingErrors() countPendingErrors()} or * {@link #getPendingErrors() getPendingErrors()} to retrieve them. * * <p><strong>Note:</strong> The {@code AUTO_FLUSH_BACKGROUND} mode may result in * out-of-order writes to Kudu. This is because in this mode multiple write * operations may be sent to the server in parallel. * See <a href="https://issues./jira/browse/KUDU-1767">KUDU-1767</a> for more * information. * * <p>The {@link KuduSession#flush()} call can be used to block until the buffer is empty. * 1. 在该模式下,调用apply以后自动返回,写入是在后台异步进行。有可能会和同一个session里面其他的写入操作一起批量提交,如果buffer的 * 空间不够用的话apply会被阻塞直到有可用空间。 * 2.由于写入是后台异步操作,可以使用countPendingErrors()或者getPendingErrors()来检索错误。 * 3. AUTO_FLUSH_BACKGROUND可能会导致写入的结果是乱序的,因为这个模式可能会并行写入服务器中。 */ AUTO_FLUSH_BACKGROUND, /** * {@link KuduSession#apply KuduSession.apply()} calls will return immediately, but the writes * will not be sent until the user calls {@link KuduSession#flush()}. If the buffer runs past * the configured space limit, then {@link KuduSession#apply KuduSession.apply()} will return * an error. * apply以后会立即返回,写操作会在flush以后执行。如果缓冲超过了配置的大小,apply则会 报错 */ MANUAL_FLUSH |
|
来自: 任易x9cojw24ff > 《Kudu》