重新密钥在以下场景中运行良好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;
描述流上的扩展命令显示流当前保存的消息数。但是select命令不会给出任何结果。关联主题上的打印主题命令也不打印任何内容。
在此处输入图像描述
Ksql版本:5.3.1,也尝试了最新版本分区=1,副本=1。
试图调查kafka服务器上的主题存储空间是否包含任何数据,发现日志文件和快照文件都为空。
什么会导致数据在写入主题后消失?
最可能的原因是Kafka集群中REKEY_S
主题的保留率设置得较低,因此会积极删除"旧"消息。
请尝试调查保留策略/设置是否适用于REKEY_S
主题。该策略不应该是紧凑的,并且应该具有由Kafka集群设置的默认主题保留策略。
如果奇怪的保留设置是原因,那么最好知道为什么保留是这样设置的,以及是什么。如果what是ksql,那么它很可能是一个bug,应该作为Github问题提出,以便进行调查。