首页 > 解决方案 > Kafka-Ksql Rekeying on stream 导致数据在几分钟后消失

问题描述

重新生成密钥在以下情况下工作正常 1. 流式传输基本主题然后重新生成密钥 - 好 2. 流式传输表格然后重新生成密钥 - 好

但是当尝试使用表时 - 表连接导致新表,在该结果表上创建流,然后重新生成流 - 它似乎可以正常工作几分钟(选择查询得到预期的结果),然后数据从新创建的表中消失溪流。

-- Table on Table join - works as expected
CREATE TABLE JOINRESULT_T AS 
SELECT d.DEVICE_ID, d.LOCATION_ALIAS,d.UPDATED_BY, 
d.UPDATED_TIMESTAMP AS UPDATED_TIMESTAMP, d.__DELETED AS __DELETED
FROM TABLE1 d LEFT JOIN TABLE2 l ON d.LOCATION_ALIAS=l.ALIAS;

-- Stream from table - works as expected
CREATE STREAM FROMJOIN_S WITH(KAFKA_TOPIC='JOINRESULT_T', VALUE_FORMAT='AVRO');

-- Rekey the above stream - Data disappears after few minutes
CREATE STREAM REKEY_S AS SELECT * FROM FROMJOIN_S PARTITION BY DEVICE_ID;

流上的描述扩展命令显示流当前持有的消息数。但是选择命令不会给出任何结果。相关主题的打印主题命令也不会打印任何内容。

在此处输入图像描述

Ksql 版本: 5.3.1 ,还尝试了最新版本 Partitions = 1,replicas =1。

尝试调查kafka服务器上的主题存储空间是否保存任何数据并发现日志文件,快照文件都是空的。

将数据写入主题后,什么会导致数据消失?

标签: apache-kafkaksqldb

解决方案


最可能的原因是REKEY_SKafka 集群中主题的保留设置较低,因此正在积极删除“旧”消息。

尝试调查保留策略/设置是否适用于REKEY_S主题。该策略不应该是紧凑的,并且应该具有 Kafka 集群设置的默认主题保留策略。

如果奇怪的保留设置是原因,那么最好知道为什么要以这种方式设置保留以及由什么设置。如果什么是 ksql,那么它可能是一个错误,应该作为Github 问题提出,以便对其进行调查。


推荐阅读