【问题标题】:changelog topics and repartition topics kafka streams更新日志主题和重新分区主题 kafka 流
【发布时间】:2021-04-23 08:36:10
【问题描述】:

如果我不使用有状态流,我想问您是否需要在我的 KafkaStreamsConfiguration 中添加复制因子。我不使用这个 RockDB。据我所知,复制因子设置用于更改日志和重新分区主题。 我了解这个更改日志主题,但是这个重新分区主题让我有点困惑......有人可以用非常基本的语言向我解释这个重新分区主题是什么,如果我不在流媒体应用程序中使用状态,我是否应该关心这个复制因素?

问候

【问题讨论】:

    标签: apache-kafka apache-kafka-streams spring-kafka


    【解决方案1】:

    简单来说,当您更改正在处理的事件/消息的键时,Kafka Streams 中会发生重新分区。

    重新分区基本上是流处理的洗牌阶段。这可能发生在 Kafka 流、Apache Spark、Flink、Storm、Hadoop 等中。这些是分布式流处理引擎 (DSPE),旨在并行执行任务以加速流程。然后,当您调用map 转换时,DSPE 会将这个逻辑map 转换为并行X 的物理map 任务(X 通常是机器的内核数)。

    因此,如果您使用mapValues 并且不更改密钥,Kafka 流将不会重新分区。但是如果您使用map 更改密钥,Kafka 流将重新分区。此外,如果您使用任何聚合转换(例如:reducejoin、...),Kafka 将执行重新分区,因为它是基于键的。

    重新分区/洗牌阶段发生在聚合阶段。假设你有一个逻辑管道:

    ... -> map -> reduce -> ...

    引擎盖下的物理管道将如下所示:

    具有相同键的事件按groupByKey 转换分组并发送到相同的reduce 并行任务实例。这是洗牌阶段。

    对于 Kafka 流,当聚合发生时,管道会从 KStream 转换为 KTable,因为消息分布在 Kafka 代理上,并且流引擎必须在不同分区上查找事件。如果您使用 IntelliJ,它会在管道更改时向您推断。在下图中,它正在发生字数统计,count 转换像reduce 一样是有状态的。

    This is a good source 阅读有关 Kafka Stream 中重新分区的更多信息。就像我说的,其他 DSPE 在洗牌阶段也依赖于重新分区。其他不错的source is this one from Flink

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-22
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      相关资源
      最近更新 更多