KStream-KTable连接,消息排序

时间:2018-10-05 18:47:10

标签: apache-kafka apache-kafka-streams

假设我在主题A上使用相同的密钥收到以下两条消息

  1. 消息1:(k,A1)(在时间t = 0收到)
  2. 消息2:(k,A2)(在时间t = 5收到)

和拓扑

KStream<Integer, A> streamA = builder.stream(topicA);
KTable<Integer, B> tableB = builder.table(topicB);

streamA.leftJoin(tableB, (a, b) -> myJoiner(a,b)).to(topicAB);

我们假设myJoiner(a1, b)以100个时间单位,而myJoiner(a2, b)以10个时间单位。消息将以什么顺序出现在topicAB上?

我要弄清的是stream.leftJoin(table,(k,v)-> f(k,v))是否是阻塞操作当stream,table和k时是相同的。? (在我的示例中,这意味着myJoiner(a1,b)将在时间t = 100处首先出现,而myJoiner(a2,b)将在时间t = 110处第二位出现)。还是它是异步的(这意味着myJoiner(a2,b)将在时间t = 15左右第一次出现,而myJoiner(a1,b)在时间t = 100左右第二次出现)

谢谢, 大卫

1 个答案:

答案 0 :(得分:0)

执行“同步”连接并保证顺序。

  

在我的示例中,这意味着myJoiner(a1,b)将在时间t = 100处首先出现,而myJoiner(a2,b)将在时间t = 110处第二次出现

是的,这就是它的执行方式。