Vector sink 压缩配置迁移指南:`compression` 布尔语法移除与字符串枚举迁移实战 Vector sink 压缩配置迁移指南compression布尔语法移除与字符串枚举迁移实战【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector导读本文以 Vector 仓库中 changelog.d/vector_compression_bool.breaking.md 记录的 breaking change 为核心讲解vectorsink用于把观测数据中继转发给下游 Vector 实例的 gRPC sink中compression选项布尔语法被移除的背景、原因与迁移方法。读完本文你将掌握如何把compression: true/false安全替换为gzip/none字符串枚举语法理解新语法背后none/gzip/zstd三种取值的源码级实现与底层传输差异并学会通过仓库内测试用例验证配置正确性。变更摘要布尔语法已被移除本仓库引入了一项破坏性变更breaking change已被废弃的vectorsinkcompression选项的布尔语法boolean syntax已被移除。这意味着在配置vectorsink 时以下两种写法将不再被接受配置加载阶段会直接报错sinks: my_vector_sink: type: vector address: http://127.0.0.1:6000 compression: true # ❌ 已移除加载报错sinks: my_vector_sink: type: vector address: http://127.0.0.1:6000 compression: false # ❌ 已移除加载报错该变更是对旧版本中“布尔型compression语法”废弃周期的收尾。早先版本曾允许用true/false简写压缩开关以兼容更早期的配置习惯如今该简写被彻底清理配置项只能使用正式的字符串枚举取值。迁移指南一行配置即可完成原变更记录给出的迁移方法非常明确只需两步替换旧语法已移除新语法推荐语义compression: truecompression: gzip启用 gzip 压缩compression: falsecompression: none关闭压缩迁移后的完整示例sinks: my_vector_sink: type: vector address: http://127.0.0.1:6000 compression: gzipsinks: my_vector_sink: type: vector address: http://127.0.0.1:6000 compression: none注意YAML 中compression: gzip不带引号也能被正确解析为字符串但为了与配置文档示例保持一致并避免与 YAML 1.1 的布尔歧义建议统一使用带引号的写法。源码佐证VectorCompression枚举与取值语义在迁移之前先理解新语法背后到底支持哪些取值。vectorsink 的压缩配置定义于 src/sinks/vector/compression.rs其核心是一个被serde以snake_case序列化的枚举#[configurable_component] #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] #[serde(rename_all snake_case)] pub enum VectorCompression { /// No compression. #[default] None, /// Gzip compression. Gzip, /// Zstandard compression. Zstd, }从源码可以确认以下事实合法取值只有三个none、gzip、zstd对应配置字符串必须与这三个值精确匹配任何布尔值或其他字符串都会导致反序列化失败默认值为None不压缩配置项声明为#[serde(default)]见 src/sinks/vector/config.rs 中compression: VectorCompression字段VectorCompression本身也标注了#[default]因此完全省略compression字段时等价于compression: none压缩级别不可配置枚举注释明确指出vectorsink 的 gRPC 传输仅支持gzip与zstd两种算法且底层 tonic 库不支持压缩级别配置所以不存在compression_level之类的衍生选项。底层映射枚举到 tonic 编码VectorCompression通过as_tonic_encoding()方法映射为 tonicgRPC Rust 实现的压缩编码类型pub const fn as_tonic_encoding(self) - Optiontonic::codec::CompressionEncoding { match self { VectorCompression::None Option::None, VectorCompression::Gzip Some(tonic::codec::CompressionEncoding::Gzip), VectorCompression::Zstd Some(tonic::codec::CompressionEncoding::Zstd), } }该映射在 src/sinks/vector/service.rs 的VectorService::new中被消费若配置了非none的压缩算法则对生成的 gRPC 客户端调用send_compressed(encoding)告知 tonic 在发送PushEvents请求即proto::vector协议时按指定算法压缩请求体let mut proto_client proto_vector::Client::new(HyperSvc { uri, client: hyper_client }); if let Some(encoding) compression.as_tonic_encoding() { proto_client proto_client.send_compressed(encoding); }这正是“布尔语法被移除”的深层原因true/false只能表达“压不压缩”无法表达gzip与zstd的算法选择也无法与枚举的默认值语义对齐统一为字符串枚举后配置模型与 tonic 传输层的表达能力完全一致。完整配置上下文compression在 vector sink 中的位置vectorsink 用于将事件中继到下游 Vector 实例例如聚合器其配置结构定义于 src/sinks/vector/config.rs。compression只是其中一个可选字段一个完整的最小配置通常长这样sinks: relay_to_aggregator: type: vector inputs: [my_source] address: http://127.0.0.1:6000 # 下游 Vector 地址必须包含端口 compression: zstd # 可选项none | gzip | zstd默认 none值得注意的相关字段便于你理解压缩选项所处的完整上下文address下游 Vector 地址支持 IP 与主机名必须携带端口已被标记为废弃推荐改用routing.endpointsrouting多端点路由配置endpointsstrategy与address互斥batch/request批处理与请求级参数压缩发生在批处理后的 gRPC 请求发送阶段tlsTLS 配置启用 TLS 时 scheme-less 端点会默认走httpskeepaliveHTTP/2 keepalive 配置用于检测已失效的空闲连接。从代码结构看压缩设置是逐端点生效的在VectorConfig::build中每个端点都会以相同的self.compression构造一个VectorService见 src/sinks/vector/config.rs 中VectorService::new(client.clone(), uri, self.compression)因此无论单端点还是多端点路由compression都会一致地作用于所有下游连接。如何验证迁移正确仓库内置测试用例仓库在 src/sinks/vector/mod.rs 中提供了专门针对该 breaking change 的单元测试可以直接作为迁移验证依据#[test] fn config_rejects_boolean_compression() { for compression in [true, false] { let result: Resultsuper::VectorConfig, _ toml::from_str(format!(compression {compression})); assert!( result.is_err(), compression {compression} should be rejected ); } }该测试明确断言compression true与compression false的 TOML 配置在解析阶段必须报错result.is_err()。这意味着迁移后如果你的旧配置仍在用布尔语法vector validate/ 启动加载就会直接失败而不是静默忽略——这正是“破坏性变更”的含义。同时仓库用参数化测试覆盖了三种合法取值的行为确保字符串枚举语法下各算法都正常工作见 src/sinks/vector/mod.rs 中的deliver_message_gzip、deliver_message_zstd、deliver_message_none三个测试它们均通过run_sink_test_with_compression构造带compression: gzip等配置的 sink 并断言事件成功送达#[tokio::test] async fn deliver_message_gzip() { run_sink_test_with_compression(TestType::Normal, Some(gzip)).await; } #[tokio::test] async fn deliver_message_zstd() { run_sink_test_with_compression(TestType::Normal, Some(zstd)).await; } #[tokio::test] async fn deliver_message_none() { run_sink_test_with_compression(TestType::Normal, None).await; }这些测试一方面印证gzip/zstd字符串会被正确解析并作用于请求发送另一方面也提醒你迁移后建议跑一遍端到端验证确认下游 Vector 实例确实收到了压缩或未压缩的PushEvents请求。迁移后的自检清单完成配置替换后建议按以下步骤确认迁移无遗漏全局搜索旧语法在配置目录中检索compression: true与compression: false含 YAML 布尔大小写变体确认没有残留配置校验运行vector validate --config 你的配置或直接启动 Vector观察是否出现反序列化错误——按仓库测试逻辑布尔值必须报错确认语义compression: false→none不压缩与省略该字段等价compression: true→gzip与旧布尔语义一致的压缩开启行为如需更强压缩比可进一步选择zstd端到端观察关注下游 Vector 实例日志与指标如EndpointBytesSent确认事件正常送达。关于本变更记录本身该变更记录存放于 changelog.d/vector_compression_bool.breaking.md属于仓库 changelog 片段机制的一部分。根据 changelog.d/README.md 的约定*.breaking.md片段必须包含## Summary与## Migration两节发布时会被自动收集进升级指南与版本 changelog——这正是本文所依赖的两段核心内容的出处。此类破坏性变更在配置层面表现为“旧的简写语法被拒绝”因此在升级 Vector 版本时检查 changelog.d 中的 breaking 片段是发现类似迁移点的最快途径。输出文章【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考