代码之家  ›  专栏  ›  技术社区  ›  Raman

Kafka流:在应用程序实例之间移动的流任务

  •  0
  • Raman  · 技术社区  · 6 年前

    考虑流应用程序设置,其输入主题为具有状态存储的6个分区。假设每小时有超过500万条记录的持续流入。如果应用程序在单个节点上运行,则所有传入记录的状态都将保留在同一个节点中。现在,如果我们在一个不同的节点上添加另一个实例,我假设它将相等地平衡两个实例之间的分区(假设我们在每个实例中将max threads设置为3)。

    我想我的问题是什么时候重新平衡发生了,如果一个分区实例从一个移动到另一个,反之亦然,这将导致恢复这些分区在各自实例上的状态存储,这需要时间。由于重新平衡,实例之间(尤其是大量的实例)分区的频繁无序移动不会成为主要开销,并影响流性能。我不确定是否可以完全阻止重新平衡(我理解这是为了负载平衡的好处),但这是否会阻止为使用存储的同一主题扩展多个实例?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Matthias J. Sax    6 年前

    卡夫卡流使用自己的实现 PartitionAssignor (不是默认的 KafkaConsumer )并实施粘性分配策略。在重新平衡期间,可以知道哪些分区被分配给了什么 KafkaStreams 如果可能的话,我们尝试将分区重新分配给同一个实例,以避免状态移动。当然,负载平衡也起到了允许扩展场景的作用。