对于传入的记录,我需要验证值,并基于结果对象,我需要将错误转发到不同的主题,如果验证成功,则可以使用context.forward()进行转发。 可以使用此链接中提供的DSL来完成
using kafka-streams to conditionally sort a json input stream
我没有在ProcessorAPI中找到明确的方法。
ValidateProcessor.java
@Override
public void process(String key, String value) {
Object result = //validation logic
if(result.isSuccessful()) {
context().forward(key, value);
}else {
context.forward("error",Object)
}
}
现在,呼叫者再次需要检查,并根据密钥需要区分接收器主题。 我正在使用processorAPI,因为我需要使用标头。
编辑:
branch(new predicate{
business logic
if(condition)
return true
else
return false;
当条件为假时,如何推送到不同的流。当前正在创建另一个谓词,该谓词收集不满足上述谓词的所有其他记录。 是否可以在相同谓词中进行操作?
答案 0 :(得分:1)
指定Topology
时,将名称分配给所有节点并连接它们:
Topology topology = new Topology();
topology.addSource("source", ...);
topology.addProcessor("X", ..., "source"); // connect source->X
topology.addSink("Y", ..., "X"); // connect X->Y
topology.addSink("Z", ..., "X"); // connect X->Z
如果将处理器“ X”连接到下游处理器“ Y”和“ Z”,则可以使用节点名称将记录发送到“ Y”或“ Z”。如果未指定名称,则记录将发送到下游(“子”)处理器。
// this is `process()` of "X"
public void process(String key, String value) {
context.forward(newKey, newValue); // send to both Y and Z
context.forward(newKey, newValue, To.child("Y")); // send it only to Y
context.forward(newKey, newValue, To.child("Z")); // send it only to Z
}