Kafka 流如何在任务内执行并行操作?

问题描述 投票:0回答:1

假设我们有一个 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
上的所有转换?

apache-kafka apache-kafka-streams
1个回答
0
投票

任务在 java 线程中执行。

它一次接收一个事件,对该事件应用所有转换,然后继续处理下一个事件。

转换按照它们在拓扑代码中出现的顺序执行(就像任何普通线程一样)

我通过在同一个 KStream 上使用 2 个

peeks

 来检查这一点。在第一个循环中创建一个 for 循环,在每次迭代中显示一条消息。第二个 
peek
 显示另一个字符串。

根据需要多次执行此类测试。每次在

first peek

 的 for 循环中的所有打印之后,都会出现 second 
peek
中的打印

© www.soinside.com 2019 - 2024. All rights reserved.