假设我们有一个 kafka-streams 拓扑,例如:
inputTopic
|
|
\ /
Kstream-source
/ \
/ \
| |
| |
process1 process2
| |
| |
topic1 topic2
读取主题产生的同一个 KStream 对象用于 2 个不同的并行进程节点,
和
process1
在拓扑代码中出现在 process2
之前。
在任务
0
中,kafka-streams 是否总是在事件上执行 process1
然后执行 process2
? (因为任务是在线程内,我假设在开发过程中完成了确定性选择)
假设我们在
evt1
上发布了 2 个活动 evt2
和 inputTopic, partition 0
。
流任务是否在
evt1
上开始转换之前完成 evt2
上的所有转换?
任务在 java 线程中执行。
它一次接收一个事件,对该事件应用所有转换,然后继续处理下一个事件。
转换按照它们在拓扑代码中出现的顺序执行(就像任何普通线程一样)
我通过在同一个 KStream 上使用 2 个peeks
来检查这一点。在第一个循环中创建一个 for 循环,在每次迭代中显示一条消息。第二个
peek
显示另一个字符串。根据需要多次执行此类测试。每次在
first peek
peek
中的打印