如何根据已处理消息的数量安排定期任务?

时间:2018-12-30 14:35:15

标签: apache-kafka apache-kafka-streams

我想使用Kafka Processor API处理来自Kafka的消息。 我想调用一些定期函数-类似于: context.schedule(IntervalMS,punctuationType, somePunctuator),其中somePunctuator执行一些定期的工作,但是我使用间隔时间作为触发器,我想在处理一定数量的消息后调用该任务

是否可以在Kafka流中进行此类触发?

1 个答案:

答案 0 :(得分:1)

是的,可以使用Kafka Streams State Store。 逻辑取决于达到已处理消息数时需要确切执行的操作。

如果需要将数据传播到下一个处理器或接收器节点,则需要将聚合值存储为键值状态存储内的对象列表。在Processor.process(..)内,您将数据放入键值存储中,然后检查项目数是否达到限制,并执行所需的逻辑(如processorContext.forward(..))。请看看类似的示例here

如果您需要在达到数字后执行一些逻辑并且不需要值,则可以仅存储计数器,并在Processor.process(..)内递增该值。