You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ClickHouse升级后无法读取Kafka tombstone消息,如何用RawBLOB处理?

解决ClickHouse RawBLOB模式读取Kafka Tombstone消息的问题

针对ClickHouse 21.9及以上版本无法读取Kafka tombstone(value为null)消息的问题,核心解决思路是关闭默认的null消息跳过机制,并配合Nullable字段类型接收消息:

步骤1:创建支持Tombstone的Kafka Engine表

在创建Kafka表时,显式添加kafka_skip_null_messages='0'参数关闭null消息跳过,同时将消息字段定义为Nullable(String):

CREATE TABLE kafkatable0 (
    message Nullable(String)
) ENGINE = Kafka(
    'broker:29092', 
    'topic1', 
    'group0', 
    'RawBLOB',
    'kafka_skip_null_messages=0'
);

步骤2:调整物化视图兼容旧版本行为

如果需要和旧版本(21.2)一样将null转为空字符串,可以在物化视图中用coalesce函数处理:

CREATE TABLE table0 (key String, message String)
ENGINE = MergeTree()
ORDER BY key;

CREATE MATERIALIZED VIEW mv0 TO table0 AS
SELECT 
    _key as key,
    coalesce(message, '') as message
FROM kafkatable0;

关键说明

  • 新版本ClickHouse默认开启kafka_skip_null_messages=1,会自动跳过value为null的tombstone消息,必须显式设置为0才能接收这类消息。
  • 若需要处理key为null的场景,可使用_raw_key虚拟列(类型为Nullable(String))替代_key,例如coalesce(_raw_key, '') as key。

验证结果

按上述配置后,发送的3条消息(包括key2的tombstone)都会被正常读取,最终table0中会有3条数据,与旧版本行为一致。

内容的提问来源于stack exchange,提问作者John A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:42:33