ksql表中的数据不是永久性的

时间:2018-12-06 16:20:48

标签: apache-kafka persistence confluent ksql

我们正在ubuntu上使用融合平台。我们有一个简单的JSON数据通过cURL请求发送到名为“ UE_Context”的kafka主题上的kafka-rest服务器。

使用以下命令为此主题创建名为“ UE_CONTEXT_STREAM”的kafka流:

CREATE STREAM UE_Context_Stream (ue_key VARCHAR, ecgi VARCHAR) WITH (KAFKA_TOPIC='UE_Context', VALUE_FORMAT='JSON');

使用以下命令为此主题创建名为“ UE_CONTEXT_TABLE”的卡夫卡表:

CREATE TABLE UE_Context_Table ( registertime BIGINT, ue_key VARCHAR, ecgi VARCHAR) WITH (KAFKA_TOPIC='UE_Context', KEY='ue_key', VALUE_FORMAT='JSON');

我使用以下cURL命令在主题上抽取了两行数据:

curl -X POST -H "Accept: application/json" -H "Content-Type: application/vnd.kafka.json.v1+json" --data '{"records":[{"key": "0x1234", "value":{"ue_key": "0x1234", "ecgi" : "1234"}}]}' "http://localhost:8082/topics/UE_Context"  
curl -X POST -H "Accept: application/json" -H "Content-Type: application/vnd.kafka.json.v1+json" --data '{"records":[{"key": "0x1234", "value":{"ue_key": "0x4321", "ecgi" : "4321"}}]}' "http://localhost:8082/topics/UE_Context"      

我有一个选择查询在表上等待,如下所示:

ksql query

当将JSON数据泵入主题时,此查询将显示表信息。然后,我们停止将JSON数据泵送到主题中,并结束选择查询并结束选择查询。如果在稍后的时间执行选择,则不会显示先前填充的表信息。有没有办法保留这些数据? Kafka连接器和使用数据库可能是一种选择。但是kSQL没有临时内存来存储表信息吗?

2 个答案:

答案 0 :(得分:3)

  

稍后会执行选择,不会显示先前填充的表信息。

一条选择语句默认为该主题的最新偏移量

如果要查看以前的数据,请you need to set the consumer offset back to the beginning

SET 'auto.offset.reset'='earliest';

此外,如文档中所述(重点介绍)

  

SELECT语句本身就是一个非持久连续查询。 SELECT语句的结果不会保留在Kafka主题中,而只会显示在KSQL控制台中。不要将CREATE STREAM AS SELECT创建的持久查询与SELECT语句的流查询结果混淆。

答案 1 :(得分:0)

ksql github README 中所述:

<块引用>

ksqlDB 允许您定义流上的物化视图和 表。物化视图由所谓的 “持久查询”。这些查询称为持久查询,因为它们 使用表格维护其增量更新的结果。

现在,关于物化视图的信息比它更多 持久查询,所以只需 read on:

<块引用>

物化视图的好处是它仅对更改(增量)进行查询, 而不是在整个表上评估查询。 ...

在 ksqlDB 中,表可以被物化为视图,也可以不。如果创建了一个表 直接在 Kafka 主题之上,它没有具体化。 无法查询非物化表,因为它们会非常高 低效。另一方面,如果一个表是从另一个表派生的 集合,ksqlDB物化它的结果,你可以进行查询 反对。