ClickHouse 26.7 后台引擎控制命令合并,NATS JetStream 改成至少一次
版本:26.7(2026-07-22 发布)
changelog:ClickHouse OSS changelogs
仓库:ClickHouse/ClickHouse
一套 SYSTEM 命令管所有后台引擎(#107476)
新增与具体表引擎无关的 SYSTEM STOP、SYSTEM START、SYSTEM PAUSE、SYSTEM CANCEL、SYSTEM REFRESH,另外还有 server 级的 SYSTEM ... ALL BACKGROUND 形式。控制范围覆盖 Kafka、RabbitMQ、NATS、S3Queue/AzureQueue 表的后台活动,以及 refreshable materialized view。
这些命令与既有的 SYSTEM ... VIEW 命令是别名关系,对 refreshable MV 来说两种写法等价;区别在于这一类命令不再绑定某个引擎,脚本和运维工具里可以用同一套写法处理不同来源的后台任务,ALL BACKGROUND 则用于在 server 级别一次性操作全部后台活动。
NATS JetStream 默认语义改为至少一次(#107476)
为了让上面这套控制在 NATS 上真正可用,JetStream 表的 ack 时机被改了:现在只在插入成功之后才 ack 消息。此前是投递后自动 ack,插入失败时消息可能丢失。改成「先插再 ack」之后,默认行为变成至少一次投递,代价是失败重试场景下重复消息的概率上升。
同时新增设置 nats_wait_for_flush_interval,默认 false。打开后,会在整个 flush 间隔内保持一个消费周期处于打开状态,而不是队列一空就立刻 flush。默认值 false 保留原有的低延迟行为,所以升级后如果不想改变延迟特征,不需要动这个设置;反过来,如果更关心批量处理的稳定性,可以显式打开它。
nats_commit_on_select(#107476)
对 JetStream 表直接执行 SELECT 会消费(ack)它读到的消息。也就是说,直接查表不是只读操作,读过的消息会被确认掉。写查询、做排查时需要注意这一点,尤其是把它当作「看一眼数据」的临时手段使用时。
Prometheus 查询接口的请求进了 system.query_log(#106611)
发往 /api/v1/query 和 /api/v1/query_range 的请求现在会记录到 system.query_log,并带 read_rows 和 read_bytes 指标。这些 HTTP 接口通常是给 Grafana 之类的上层工具调用的,之前很难回答「是谁在打 Prometheus 查询接口、打了多少」这类问题;现在可以直接查 system.query_log 定位调用来源和读取量。
remote-write v1 handler 支持 zstd(#110907)
实验性的 Prometheus remote-write v1 HTTP handler 增加了 zstd 压缩支持。对写入端来说,压缩后传输的数据量更小。
升级到 26.7 时值得留意的一点
这几条里行为变化最直接的是第 2 条:NATS JetStream 表的 ack 时机从「投递即 ack」变成「插入成功才 ack」。默认语义转为至少一次后,重复消息的处理逻辑需要复查;延迟敏感的场景可以评估 nats_wait_for_flush_interval 是否要调整。其余几条——统一的后台控制命令、Prometheus 查询接口进 system.query_log、remote-write v1 的 zstd——属于能力新增,不影响既有用法。