【问题标题】:ksqlDB not taking rowkey properlyksqlDB 没有正确使用 rowkey
【发布时间】:2020-06-02 18:22:21
【问题描述】:

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

ksqlDB正在制作的rowkey如下:

我希望 rowkey 是 sensorid.... 不知道怎么回事

请帮帮我。

提前致谢!!

PS:

Confluent 平台版本:5.5

【问题讨论】:

    标签: ksqldb confluent-platform


    【解决方案1】:

    这里的问题是生成到 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>);

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-19
    • 2022-10-20
    • 1970-01-01
    • 2016-07-27
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    相关资源
    最近更新 更多