【压测数据分享】VictoriaLogs 中使用 elasticsearch 格式写入对比 jsonline 格式写入的性能差异

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


通过阅读源码发现,当使用 elasticsearch 格式写入 vlogs 时,明显做了更多繁重的计算:

// /github.com/VictoriaMetrics/VictoriaLogs/app/vlinsert/elasticsearch/elasticsearch.go

// es 格式日志的写入
func readBulkLine(lr *insertutil.LineReader, timeFields, msgFields []string, lmp insertutil.LogMessageProcessor) (bool, error) {
	var line []byte

	// Read the command, must be "create" or "index"
	for len(line) == 0 {
		if !lr.NextLine() {
			err := lr.Err()
			return false, err
		}
		line = lr.Line
	}
	lineStr := bytesutil.ToUnsafeString(line)
	// 每行日志,都对应着一行 create. 这实在太浪费了
	if !strings.Contains(lineStr, `"create"`) && !strings.Contains(lineStr, `"index"`) {
		return false, fmt.Errorf(`unexpected command %q; expecting "create" or "index"`, line)
	}

	// Decode log message
	if !lr.NextLine() {
		if err := lr.Err(); err != nil {
			return false, err
		}
		return false, fmt.Errorf(`missing log message after the "create" or "index" command`)
	}
    // ...
}

于是我尝试使用 jsonline 的格式来传输日志。
效果如下:

网络流量下降明显

image

181 mb/s => 14.8 mb/s,减少 12.2 倍。(注意:elasticsearch 格式和 jsonline 格式都开启了 zstd 压缩。)

image

out 流量同样下降明显。

CPU

因为抖动较大,很难说下降了多少。
感觉上是下降了的:

image

其他指标未见明显变化。
内存抖动较大,不确定增减情况。但是在切换日志格式后的前面几分钟内下降明显。

总结

不管怎么样,从网络流量上看,jsonline 格式比 elasticsearch 格式优很多。推荐使用 jsonline 格式。

这次切换还发生了另一个插曲,可能是 vlogs 的 bug。有兴趣可以看看这个 issue: When the vector's sink format was changed from Elasticsearch to JSONline, the in-memory merge of vlogs stopped for 7 minutes.

posted on 2025-11-21 17:02  ahfuzhang  阅读(0)  评论(0)    收藏  举报