带有虚拟输入主题的消息的壁钟时间安排

时间:2018-10-23 11:19:30

标签: apache-kafka apache-kafka-streams

我对我们目前用于基于状态存储调度消息生成的模式有疑问:
我们正在根据基于DSL构建的“正常”处理流中的处理状态写入状态存储。我们将transform()与壁钟时间安排联系起来,每隔n秒查看一次状态存储。
根据状态,我们forward()向下游transform()发送一条新消息以进行处理(我们执行延迟重试的方式)。 schedule()需要一个输入流,该输入流具有一个虚拟主题作为输入,它将永远不会看到数据。

可以在没有虚拟输入主题的情况下完成此操作吗?
别人如何做?

Matthias回答后的其他信息: Topo

np.random.normal(32000,200000,3650)用作基于状态存储中数据的定时查找的数据生成器。这用于重试副作用。

1 个答案:

答案 0 :(得分:0)

您似乎希望共享一些代码以进行有副作用的常规处理以及基于无副作用的标点的处理。否则,您不会在两种情况下都使用MyTransformer吗?

因此,我想知道您是否可以用一个Transformer而不是三个来完成所有工作。

MyTransformer<K,V,R> implement Transformer<K,V,R> {

    public void init(ProcessorContext context) {
      context.schedule(..., new MyPunctuator());
    }

    public R transform(K key, V value) {
      // for every record from the source topic do everything
      doSharedStuff();
      doStuffWithSideEffect();
    }

    private doSharedStuff() {...}
    private doStuffWithSideEffect() {...}

    private class MyPunctuator implements Punctuator {
        public void punctuate(long timestamp) {
          for(KeyValue kv : ...) { // whatever k/v-pair to want to "forward"
            // for every record you want to emit delayed, do only some part
            doSharedStuff();
          }
        }
    }
}