当前位置: 首页 > 知识库问答 >
问题:

Kafka流再平衡:从再平衡到错误的状态转换

罗翔
2023-03-14

我有4个单一分区和应用程序的三个实例的主题。我试图通过编写一个自定义的PartitionGrouper来实现可伸缩性,它将创建如下3个任务:

第一个实例-topic1,分区0,topic4,分区0

第二个实例-主题2,分区0

第三实例-桌面3,分区0

我将NUM_STANDBY_REPLICAS_CONFIG配置为1,因为它将在本地维护状态(也可以消除invalidstatestore异常)。

上述设置在两个实例中运行良好。当我把它增加到三个实例时,我开始面临重新平衡的问题。

StickyTaskAssignor:58 - Unable to assign 1 of 1 standby tasks for task [1009710637_0]. There is not enough available capacity. You should increase the number of threads and/or application instances to maintain the requested number of standby replicas.
    [INFO ] 2017-12-25 20:05:42.221 [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] StreamThread:888 - stream-thread [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] State transition from PARTITIONS_REVOKED to PARTITIONS_ASSIGNED.
    [INFO ] 2017-12-25 20:05:42.221 [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] KafkaStreams:268 - stream-client [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449] State transition from REBALANCING to REBALANCING.
    [INFO ] 2017-12-25 20:05:42.276 [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] StreamThread:195 - stream-thread [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] partition assignment took 55 ms.
    current active tasks: [1009710637_0]
    current standby tasks: [1240464215_0, 1833680710_0]
    previous active tasks: []
    [INFO ] 2017-12-25 20:05:42.631 [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] StreamThread:939 - stream-thread [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] Shutting down
    [INFO ] 2017-12-25 20:05:42.631 [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] StreamThread:888 - stream-thread [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] State transition from PARTITIONS_ASSIGNED to PENDING_SHUTDOWN.
    [INFO ] 2017-12-25 20:05:42.633 [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] KafkaProducer:972 - Closing the Kafka producer with timeoutMillis = 9223372036854775807 ms.
    [INFO ] 2017-12-25 20:05:42.638 [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] StreamThread:972 - stream-thread [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] Stream thread shutdown complete
    [INFO ] 2017-12-25 20:05:42.638 [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] StreamThread:888 - stream-thread [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] State transition from PENDING_SHUTDOWN to DEAD.
    [WARN ] 2017-12-25 20:05:42.638 [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] KafkaStreams:343 - stream-client [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449] All stream threads have died. The Kafka Streams instance will be in an error state and should be closed.
    [INFO ] 2017-12-25 20:05:42.638 [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449-StreamThread-1] KafkaStreams:268 - stream-client [app-03-cfaf7841-dc19-4ee4-9d05-ae4928c21449] State transition from REBALANCING to ERROR.

共有1个答案

斜俊
2023-03-14

我假设您的分区分组器破坏了某些东西。编写一个正确的自定义分区分组器非常困难,因为您需要了解很多关于Kafka Streams的内部结构。因此,首先不建议使用它。

错误本身意味着StandbyTask无法成功分配给线程,因为没有足够的线程。一般来说,这种思想是StandbyTask不能分配给运行相应“活动”任务的线程或同一stand by task的另一个副本:它不会增加容错能力,而只会浪费内存,就好像一个线程死了,所有任务都死了一样。

为什么会出现这个错误还不清楚(调试愉快:)。

但是,对于您的用例,您应该启动订阅单个主题的不同应用程序实例,并使用不同的application.id来横向扩展您的应用程序。

 类似资料:
  • 我知道在你的流中的任何时间点都可能发生再平衡。当它发生时,由于没有提交给定偏移量的最新偏移量,可能会发生事件的重新处理。 Kafka流是否允许在重新平衡发生之前完成任何飞行中处理?我的意思是,你的应用程序正在消耗一个记录(在你的过程方法内部),发生一个再平衡事件。该处理是否立即中止或允许处理方法完成? 一个具体的例子是 最后一次计算是否会在状态存储中结束并转发到接收器主题?因此,这意味着当重新平衡

  • 当我们的kafka主题中有多个分区时,分区重新平衡是一件常见的事情吗? 这并不一定意味着我们的应用程序存在延迟或问题? 我一直看到分区被撤销和重新分配的日志。

  • Kafka再平衡算法是否适用于不同主题? 假设我有5个主题,每个主题都有10个分区,同一消费者组中有20个消费者应用程序实例,每个实例都订阅了这5个主题。 Kafka会尝试在20个实例中平衡50个分区吗? 还是它只在一个主题内保持平衡,因此10个第一个实例可能(或可能)接收所有50个分区,而其他10个实例可能保持空闲? 我知道,在过去,Kafka并没有在不同的主题之间取得平衡,但现在的版本呢?

  • 我用Kafka-斯特里姆齐算子在库伯内特斯上运行Kafka。我正在使用增量粘性再平衡策略,通过以下配置我的消费者: 每次我在我的消费者组中缩放消费者时,该组中的所有现有消费者都会生成以下异常 线程“main”组织中出现异常。阿帕奇。Kafka。常见的错误。RebalanceInProgressException:由于使用者正在进行自动分区分配的重新平衡,因此无法完成偏移量提交。您可以通过调用pol

  • 有人能告诉我Kafka消费者的再平衡算法是什么吗?我想了解分区计数和消费者线程是如何影响这一点的。 非常感谢。

  • 我有一个Kafka流应用程序,它从几个主题中获取数据,并将数据加入另一个主题。 Kafka配置: 注意:我在运行Kafka Brokers的机器上运行Kafka Streams应用程序。 每小时消耗/产生数百万条记录。每当我让Kafka经纪人倒下时,都会进入再平衡阶段,再平衡大约需要30分钟,有时甚至更长时间。 有人知道如何解决Kafka消费者的再平衡问题吗?而且,很多时候,它在重新平衡时抛出异常