【问题标题】:Ksql Only produce an event if there isn't the same event in the stream alreadyKsql 仅在流中没有相同事件时才产生事件
【发布时间】:2023-01-06 23:07:44
【问题描述】:

假设我有一个带有键 A 和属性 B、C 和 D 的事件。在我的传入流中,该事件如下所示: 答:{B="BVal", C="CVal", D="DVal"} 现在我只需要 A、B 和 C 的信息,这就是我使用 ksql 选择 B 和 C 的原因。现在我的流看起来像这样: 答:{B="BVal", C="CVal"} 现在为传入流生成以下事件: 1:{B="猫", C="狗", D="鱼"} 因为我只是选择 B 和 C,所以我的活动应该如下所示: 1:{B="猫", C="狗"} 我遇到的问题是,如果我遇到这样的事件: 1:{B="Cat", C="Dog", D="Rabbit"} 创建以下事件: 1:{B="猫", C="狗"} 这是完全相同的事件。因此我的问题是:我如何确保我不会两次产生完全相同的事件? (只是因为它不是必需的,而且我不希望我的流消费应用程序重新消费完全相同的事件)

我可以想象某种比较——也许每个键都有一个哈希值。 也许还有其他最佳实践

【问题讨论】:

    标签: apache-kafka ksqldb


    【解决方案1】:

    Kafka / KsqlDB 不预先检查记录内容。 Kafka 接受序列化字节,然后您选择它们​​,反序列化并呈现人类可读的输出……也就是说,生产者不可能知道以前的内容“匹配”;它只是将字节附加到日志中。您需要在外部存储您的生产者应用程序中已发送的内容,以防止主题本身出现重复。或者,从消费者端,您可以查询同一个商店以防止处理重复,但这在 ksql 中是不可能的。

    现在,如果你在 ksql 中有一个 TABLE,它会根据键进行重复数据删除,但是当你用 1 替换 A 时,这不会有任何好处,而且肯定不会帮助 B、C 的值,除非你扫描整个表并比较每个值对象(同样,不可能直接在 ksql 中)。

    或者,您可以尝试分组/选择不同的值,但根据查询,在您重新启动查询之前,它可能仍然为每个重复事件提供 EMIT 一条记录

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多