首页 > 解决方案 > ksqlDB 没有正确使用 rowkey

问题描述

我在json中生成了有关名为 SENSOR_STATUS_DETAILS 的主题的以下数据:

1001
{
  "sensorid": 1001,
  "status": "CONNECTED",
  "lastconnectedtime": "2020-05-31 22:31:54"
}
1002
{
  "sensorid": 1002,
  "status": "CONNECTED",
  "lastconnectedtime": "2020-05-31 22:33:37"
}

我正在尝试从中制作一张表格:

CREATE TABLE STATUS_IB_TABLE (ROWKEY INT KEY,
  sensorid INTEGER,
  status VARCHAR,
  lastconnectedtime STRING)
WITH (TIMESTAMP='lastconnectedtime', TIMESTAMP_FORMAT='yyyy-MM-dd HH:mm:ss', KAFKA_TOPIC='SENSOR_STATUS_DETAILS', VALUE_FORMAT='JSON', KEY='sensorid');

正在制作的rowkey ksqlDB如下:

在此处输入图像描述

我希望 rowkey 是sensorid .... 我不知道发生了什么

请帮助我。

提前致谢!!

PS:

汇合平台版本:5.5

标签: ksqldbconfluent-platform

解决方案


这里的问题是生成到 Kafka 主题的数据SENSOR_STATUS_DETAILS有一个STRING键,而不是INT键。

如果您使用它,STRING "1001"它恰好会序列化为与INT. 如果你反序列化那些与你相同的字节,INT你会得到 number 825241649

你有两个选择:

  1. 更改生成数据的方式,以便生成序列化的 32 位整数作为 Kafka 消息的密钥并继续导入为ROWKEY INT KEY,或
  2. 更改您的CREATE TABLE语句以获取STRING密钥:

    CREATE TABLE STATUS_IB_TABLE ( ROWKEY STRING KEY, // <-- string key sensorid STRING, // <-- matching type here. status VARCHAR, lastconnectedtime STRING ) WITH (<as above>);

第一个选项可能会导致性能稍好


推荐阅读