我有一个简单的 kafka 2.0.1 流,如 https://kafka.apache.org/documentation/streams/中所述
将流想象成一系列股票价格。对于每个价格,我都会触发一些CPU和I/O密集型计算。显然,价格以非常高的速度到达,因此让我们假设以下情况
- 股票的价格在上午 10 点到达,我安排了一系列计算,说大约需要 3 分钟才能完成。 同时,3个价格在10:
- 01,10:02和10:03到达
Kafka 中是否有任何明智的方法可以跳过 10:01、10:02 的价格更新,直接转到 10:03 的价格更新(即股票的最新价格更新)?我在 10:01 和 10:02 处理更新没有意义吗?
在 akka 中,我也许可以做一个自定义邮箱。这可能不是一个纯粹的流媒体要求,但这听起来是一个足够简单的要求,其他人应该面对这个问题。
您可以使用 KTable 存储股票价格的更新状态。它将始终保留最新记录,并用新值更新以前的值。如果密钥">stock1"及以下记录有 3 条记录在给定时间到达流中
<stock1, 10> // at time 10:01
<stock1, 8> // at time 10:02
<stock1, 13> // at time 10:03
KTable 将导致股票 1 的<stock1, 13>
。
Kafka 将根据事件时间生成最终结果。 我建议使用 KTable 并始终从流中选择最新记录。
您可以找到有关 KTables 的更多信息:https://docs.confluent.io/current/streams/concepts.html#ktable