我知道在你的流中的任何时间点都可能发生再平衡。当它发生时,由于没有提交给定偏移量的最新偏移量,可能会发生事件的重新处理。
Kafka流是否允许在重新平衡发生之前完成任何飞行中处理?我的意思是,你的应用程序正在消耗一个记录(在你的过程方法内部),发生一个再平衡事件。该处理是否立即中止或允许处理方法完成?
一个具体的例子是
public void process(String key, String value) {
String result = computeSomething(key,value) <---rebalance triggered here in time
stateStore.put(key,result);
context.forwared(key, result);
}
最后一次计算是否会在状态存储中结束并转发到接收器主题?因此,这意味着当重新平衡完成时,新分区将具有存储中的最后一个值,但仍有可能“重新处理”该主题之外的消息?
如果重新平衡被触发,(底层消费者的)后台心跳线程将只在客户端设置一个标志。处理将正常继续。处理完成后,将调用消费者#轮询()
并评估重新平衡标志。如果设置了标志,所有挂起的对状态存储和主题的写入将被刷新,输入主题偏移将被提交,随后重新平衡将继续。
唯一的情况是,如果您的处理时间比max.poll长。间隔ms
——如果在此超时之前未调用poll()
(例如,您的process()
方法需要更长时间),则应用程序将被视为“死机”,重新平衡仍将继续。在这种情况下,下次调用poll()
时,应用程序将检测到它退出了消费者组,并将重新加入该组,即触发新的重新平衡。
我有4个单一分区和应用程序的三个实例的主题。我试图通过编写一个自定义的PartitionGrouper来实现可伸缩性,它将创建如下3个任务: 第一个实例-topic1,分区0,topic4,分区0 第二个实例-主题2,分区0 第三实例-桌面3,分区0 我将NUM_STANDBY_REPLICAS_CONFIG配置为1,因为它将在本地维护状态(也可以消除invalidstatestore异常)。 上
当我们的kafka主题中有多个分区时,分区重新平衡是一件常见的事情吗? 这并不一定意味着我们的应用程序存在延迟或问题? 我一直看到分区被撤销和重新分配的日志。
我用Kafka-斯特里姆齐算子在库伯内特斯上运行Kafka。我正在使用增量粘性再平衡策略,通过以下配置我的消费者: 每次我在我的消费者组中缩放消费者时,该组中的所有现有消费者都会生成以下异常 线程“main”组织中出现异常。阿帕奇。Kafka。常见的错误。RebalanceInProgressException:由于使用者正在进行自动分区分配的重新平衡,因此无法完成偏移量提交。您可以通过调用pol
Kafka再平衡算法是否适用于不同主题? 假设我有5个主题,每个主题都有10个分区,同一消费者组中有20个消费者应用程序实例,每个实例都订阅了这5个主题。 Kafka会尝试在20个实例中平衡50个分区吗? 还是它只在一个主题内保持平衡,因此10个第一个实例可能(或可能)接收所有50个分区,而其他10个实例可能保持空闲? 我知道,在过去,Kafka并没有在不同的主题之间取得平衡,但现在的版本呢?
有人能告诉我Kafka消费者的再平衡算法是什么吗?我想了解分区计数和消费者线程是如何影响这一点的。 非常感谢。
我有一个Kafka Streams应用程序,它从几个主题读取数据,连接数据并将其写入另一个主题。 每小时消耗/产生几百万条记录。每当我关闭一个代理时,应用程序就进入重新平衡状态,在重新平衡多次之后,它开始使用非常旧的消息。 注意:当Kafka Streams应用程序运行良好时,它的消费者滞后几乎为0。但再平衡之后,它的滞后从0到1000万。 这会不会是因为偏移.保留.分钟。 在这方面的任何帮助都将