![](/img/trans.png)
[英]Kafka Streams: Login module control flag not specified in JAAS config
[英]Kafka Streams Flow Of Control
我有一个关于 kafka 流应用程序中控制流的基本问题。 如果有两个源主题 A 和 B。假设 A 的记录的时间戳早于 B。流应用程序处理记录的顺序是否有保证?
我做了一个非常基本的测试,并在它们被消耗时偷看记录,并通过 Instant.now 的简单输出打印它们被处理的瞬间
KStream<String, String> akStream= builder.stream("A",
Consumed.with(Serdes.String(), Serdes.String()).withOffsetResetPolicy(Topology.AutoOffsetReset.EARLIEST))
.peek((s, string) -> System.out.println("Topic A at " + Instant.now() ));
KStream<String, String> bkStream= builder.stream("B",
Consumed.with(Serdes.String(), Serdes.String()))
.peek((s, string) -> System.out.println("Topic B " + Instant.now()));
这些是主题中记录的开始和结束时间戳
A : 2020-03-27 14:36:04 (epoch: 1585316164843) 2020-03-27 14:34:02 (epoch: 1585316042569)
B : 2020-03-30 11:04:17 (epoch: 1585559057167) 2020-03-17 14:44:38 (epoch: 1584452678527)
主题 B 记录在主题 A 之前被拾取。Sysout 显示来自主题 B 的所有记录 有人可以帮助理解这一点吗? 在编写具有多个输入源的流应用程序时,我想使用这种理解。
提前致谢
您构建流的方式,每个流都单独存在,没有排序保证。
关于基于时间戳处理记录。 您只能在一个时间窗口内执行此操作。 例如,如果您有两个主题 A 和 B,您可以加入它们,并使用时间窗口对事件进行排序。
<VO,VR> KStream<K,VR> join(KStream<K,VO> otherStream,
ValueJoiner<? super V,? super VO,? extends VR> joiner,
JoinWindows windows)
这取决于。 一般情况下,不保证不同主题之间的处理顺序。 但是有一个例外:如果单个任务处理来自不同主题的数据,则记录将按时间戳顺序处理。 然而,这是一种尽力而为的方法; 从 Kafka Streams 2.3 开始,这些排序保证得到了改进,您可以使用max.task.idle.ms
配置来影响它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.