Kafka Streams:标点与流程

Ram*_*man 7 apache-kafka apache-kafka-streams

在流应用程序中的单个任务中,以下两个方法是否独立运行(意味着“process”方法正在处理来自上游源的传入消息,“punctuate”方法也可以根据指定的时间表并行运行,并且WALL_CLOCK_TIME 作为 PunctuationType?)还是它们共享相同的线程,因此它是在给定时间运行的线程,如果是这样,如果 process 方法不断从上游源获取消息,那么 punctuate 方法将永远不会被调用?

  • Processor.process(K key, V value)
    使用给定的键和值处理记录。

  • ProcessorContext.schedule(long interval, PunctuationType type, Punctuator callback)
    为处理器安排周期性操作。

另外,请说明在 punctuate 方法中分区 id 值为 -1 是什么意思。punctuate 方法不是特定于任何分区吗?

  • int ProcessorContext.partition()
    返回当前输入记录的分区id;如果它不可用,则可能是 -1(例如,如果从标点调用中调用此方法)

Mat*_*Sax 10

这两种方法都在单个线程中执行。punctuate()如果有输入数据或没有输入数据,将独立调用基于挂钟的时钟:在调用process()线程之间检查系统时间并punctuate()在必要时调用。

对于分区信息:是的,标点符号与分区无关。当然,标点是特定于一个任务的,但是,一个任务可能有多个输入分区(例如,如果它执行 amergejoin)所以不清楚要传递什么分区信息。为了简单起见,单个分区的情况以相同的方式处理由于多分区大小写和标点符号与分区分离。