为什么在KSQL流中看到重复项?

时间:2019-03-21 00:24:25

标签: ksql

我使用create stream as select创建了ksql流,由于某种原因,流的CSAS持久流查询为每个源记录生成4个重复记录。如何避免重复?我的设置有什么问题?

这是我的设置:

  1. 来自基础Kafka主题的信息流:
CREATE STREAM ORDERS ( ... ) WITH (
  KAFKA_TOPIC='orders.prod',
  VALUE_FORMAT='json'
);

此流看起来不错-按键选择,返回一条记录:

SELECT * FROM ORDERS WHERE ROWKEY = 'order-123'

1553124285000 | order-123 | ... | ... | ...
  1. 已更新密钥流:
CREATE STREAM ORDERS_REKEYED WITH (PARTITIONS=6, REPLICAS=2)
  AS SELECT * FROM ORDERS PARTITION BY LEGACY_ID;

现在,当查询重新生成密钥的流时,我看到4条相同的记录:

SELECT * FROM ORDERS_REKEYED WHERE ROWKEY = 'abc'

1553124285000 | abc | order-123 | ... | ... | ...
1553124285000 | abc | order-123 | ... | ... | ...
1553124285000 | abc | order-123 | ... | ... | ...
1553124285000 | abc | order-123 | ... | ... | ...

这不是我所期望的。我开始使用show queries;查看运行查询,发现每个节点使用不同的后缀编号(例如,节点1运行CSAS_ORDERS_REKEYED_16,节点2运行CSAS_ORDERS_REKEYED_21 ...这是按节点运行查询的完整日志:

  • 节点1:CSAS_ORDERS_REKEYED_16
  • 节点2:CSAS_ORDERS_REKEYED_21
  • 节点3:CSAS_ORDERS_REKEYED_15
  • 节点4:CSAS_ORDERS_REKEYED_21
  • 节点5:CSAS_ORDERS_REKEYED_16
  • 节点6:CSAS_ORDERS_REKEYED_18

我不明白为什么我在6个节点上有4个查询(16、21、15、18)?这可能是每个输入记录具有4个相同的输出记录的原因吗?

我应该在所有节点上只有一个唯一查询吗?还是每个节点都应该使用自己的后缀号运行查询?

1 个答案:

答案 0 :(得分:0)

我在github上提出了一个bug来跟踪此问题,因为您不是唯一强调此问题的人:https://github.com/confluentinc/ksql/issues/4111

能否让我们知道您使用的CLI / Server版本?

您还能从发生这种情况的那一刻起获取服务器日志吗?那可能超级有用。请上传到github问题。