Kafka 流的超时

timeouts for Kafka streams

我期待关于 Kakfa 主题的 n 条消息,一旦我收到 n 条消息,我就会发出一条关于新主题的消息。我正在使用流 API 来执行此操作,这很简单。但是,由于系统的不可靠性,我可能永远不会收到 n,但如果已收到 n 消息中的 x%(例如 95%),我仍然想发出消息y 秒内未录制新消息。这对 Kafka 流是否可行,还是我需要为它编写一个消费者?

如果 Kafka Streams 具有类似于 Rx (http://reactivex.io/documentation/operators/timeout.html) 的超时概念,我认为这是可能的,但我还没有在流 API 中找到一个。

没有超时的概念,但你可以使用标点符号来做你想做的事。您将需要使用 Kafka 1.0.0 添加挂钟时间标点符号并允许取消标点符号时间表。

因此,每次您收到一条记录并点击 x% 标记时,您都可以注册一个带有您想要的超时时间的时间表。如果您在超时前收到下一条消息,您可以取消预约并注册一个新的预约。此外,如果标点符号触发,您可以发出和取消当前计划。

关于此 atm 的文档不多,因为 Confluent Open-Source 4.0 尚未发布(它内部使用 Kafka 1.0.0)。但是您可以查看设计方案以了解一些细节:https://cwiki.apache.org/confluence/display/KAFKA/KIP-138%3A+Change+punctuate+semantics

Note: you don't need to upgrade your brokers and can just upgrade your Streams library to 1.0.0 if you want. Cf. https://docs.confluent.io/current/streams/upgrade-guide.html#compatibility (1.0.0 has the same backward compatibility to older brokers as 0.11.0.x)