我用Kafka-斯特里姆齐算子在库伯内特斯上运行Kafka。我正在使用增量粘性再平衡策略,通过以下配置我的消费者:
ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG,
org.apache.kafka.clients.consumer.CooperativeStickyAssignor.class.getName()
每次我在我的消费者组中缩放消费者时,该组中的所有现有消费者都会生成以下异常
线程“main”组织中出现异常。阿帕奇。Kafka。常见的错误。RebalanceInProgressException:由于使用者正在进行自动分区分配的重新平衡,因此无法完成偏移量提交。您可以通过调用poll()来尝试完成重新平衡,然后重试该操作
知道是什么导致了这个异常和/或如何解决它吗?
谢谢你。
每当消费者组的元数据信息发生变化时,就会发生消费者再平衡。
在一个组中添加更多的消费者(用你的话说就是缩放)就是这样一个变化,并触发重新平衡。在这个变化过程中,每个消费者都将被重新分配分区,因此在重新分配完成之前不知道要提交哪些偏移量。现在,StickyAssignor
确实尝试确保尽可能保留以前的分配,但是重新平衡仍然会被触发,甚至分区的分配也将优先于保留以前的分配。(参考-Kafka文档)
除此之外,异常的信息是不言自明的,即在重新平衡的过程中,一些操作是被禁止的。
如何避免这样的情况发生?
这是一个棘手的问题,因为Kafka需要重新平衡才能有效工作。有几种做法可以用来避免不必要的影响:
max.poll.interval.ms
-这样遇到这些异常的可能性就降低了。max.poll.records
ormax.partition.fetch.bytes
group.initial.rebalance.delay.ms
(第一次部署或销毁所有内容并重新部署)这些技术只能帮助您减少不必要的行为或异常,但不会完全阻止重新平衡。
当我们的kafka主题中有多个分区时,分区重新平衡是一件常见的事情吗? 这并不一定意味着我们的应用程序存在延迟或问题? 我一直看到分区被撤销和重新分配的日志。
我知道在你的流中的任何时间点都可能发生再平衡。当它发生时,由于没有提交给定偏移量的最新偏移量,可能会发生事件的重新处理。 Kafka流是否允许在重新平衡发生之前完成任何飞行中处理?我的意思是,你的应用程序正在消耗一个记录(在你的过程方法内部),发生一个再平衡事件。该处理是否立即中止或允许处理方法完成? 一个具体的例子是 最后一次计算是否会在状态存储中结束并转发到接收器主题?因此,这意味着当重新平衡
一段时间后,Kubernetes controller将重新创建/重新启动失败/死亡的消费者实例,并再次执行新的重新平衡。 是否有任何方法来控制第一个重新平衡过程(当消费者死亡时)?例如,等待几秒钟而不重新平衡,直到失败的消费者返回,或者直到触发超时。如果消费者返回,是否继续基于旧的再平衡分配(即,没有新的再平衡)进行消费?
有人能告诉我Kafka消费者的再平衡算法是什么吗?我想了解分区计数和消费者线程是如何影响这一点的。 非常感谢。
我有4个单一分区和应用程序的三个实例的主题。我试图通过编写一个自定义的PartitionGrouper来实现可伸缩性,它将创建如下3个任务: 第一个实例-topic1,分区0,topic4,分区0 第二个实例-主题2,分区0 第三实例-桌面3,分区0 我将NUM_STANDBY_REPLICAS_CONFIG配置为1,因为它将在本地维护状态(也可以消除invalidstatestore异常)。 上
Kafka再平衡算法是否适用于不同主题? 假设我有5个主题,每个主题都有10个分区,同一消费者组中有20个消费者应用程序实例,每个实例都订阅了这5个主题。 Kafka会尝试在20个实例中平衡50个分区吗? 还是它只在一个主题内保持平衡,因此10个第一个实例可能(或可能)接收所有50个分区,而其他10个实例可能保持空闲? 我知道,在过去,Kafka并没有在不同的主题之间取得平衡,但现在的版本呢?