我希望在Kakfa主题上发送n
条消息,一旦我收到n
条消息,我会在新主题上发出消息。我使用流API来执行此操作,这很简单。但是,由于系统中的不可靠性,我可能永远不会收到n
但我仍然希望在收到x%
消息的95%
(例如n
)时发出消息并且在y
秒内未记录新消息。这可能与Kafka流有关,还是我需要为它编写消费者?
如果Kafka Streams有一个类似于Rx(http://reactivex.io/documentation/operators/timeout.html)的超时概念,我认为这是可能的,但我还没有能够在流API中找到一个。
答案 0 :(得分:2)
没有超时概念,但您可以使用标点符号来执行您想要的操作。您将需要使用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
注意:您无需升级代理,只需将Streams库升级到1.0.0即可。参看https://docs.confluent.io/current/streams/upgrade-guide.html#compatibility(1.0.0与0.11.0.x的旧代理具有相同的向后兼容性)