我正在尝试对Kafka Stream进行编程,我必须加入两个流,我想问一下哪个选项会更有效?
我有一个带有1000万个AvroObject1的带有AvroObject1的Kafka TopicA和另一个带有50000个AvroObject2的带有AvroObject2的TopicB。
以下哪个流连接配置效率更高(或者有什么区别?)
avroObject1Stream
.join(avroObject2Stream)
或
avroObject2Stream
.join(avroObject1Stream)
作为后续问题,在TopicA上我保留了一天的时间,而TopicB上保留了10天,我使用以下JoinWindows配置。...
avroObject1Stream
.join(avroObject2Stream,
JoinWindow.of(Duration.ofDays(10)).grace(Duration.ofDays(10)))
现在,我知道流连接主题的日志保留时间是JoinWindows维护时间+ 1天(开箱即用),但这对于TopicA 1天保留时间意味着什么,当AvroObject1的年龄变大时,它将从TopicA中消失1天,但1天后它们仍将在“流加入主题”中仍然可见,还是Kafka保留操作会使它们从“加入主题”中消失?
寻求答案...
答案 0 :(得分:0)
它是流处理,因此“对象数”无关紧要。从概念上讲,流是无限的。因此,这两个程序是相同的,并且内部连接的流是左侧,而哪个流是右侧,这没有区别。
联接的更改日志保留时间不影响您输入主题的保留时间。对于联接,基本上发生的是,将每个输入记录复制到本地存储和附加的changelog主题中。如果您的数据从输入主题中删除,则该数据不会从changelog主题存储中删除。在存储保留时间过去之后,store and changelog主题将删除其记录副本。