哪个版本的Kafka Stream效率更高?

时间:2019-07-25 08:03:56

标签: apache-kafka apache-kafka-streams

我正在尝试对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保留操作会使它们从“加入主题”中消失?

寻求答案...

1 个答案:

答案 0 :(得分:0)

它是流处理,因此“对象数”无关紧要。从概念上讲,流是无限的。因此,这两个程序是相同的,并且内部连接的流是左侧,而哪个流是右侧,这没有区别。

联接的更改日志保留时间不影响您输入主题的保留时间。对于联接,基本上发生的是,将每个输入记录复制到本地存储和附加的changelog主题中。如果您的数据从输入主题中删除,则该数据不会从changelog主题存储中删除。在存储保留时间过去之后,store and changelog主题将删除其记录副本。