ksqlDB 没有正确使用 rowkey

ksqlDB not taking rowkey properly

我在 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"
}

我正在尝试从中制作一个 table 作为:

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');

ksqlDB 生成的行键如下:

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

请帮我解决这个问题。

提前致谢!!

PS:

Confluent 平台版本:5.5

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

如果您采用 STRING "1001",它恰好序列化为与 INT 相同的字节数。如果你反序列化那些与 INT 相同的字节,你会得到数字 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>);

第一个选项可能会带来更好的性能