卡夫卡消费者的重新平衡及其影响



我是Kafka的新手,我正在尝试在Java和Go中设计一个包装库(使用Confluent/kafka-go),以便在内部使用kafka。对于我的用例而言,Commitsync是一个至关重要的步骤,我们只能在正确地进行旧的读取后才进行阅读。重复处理并不是一个大问题,我们的客户服务已经足够了。但是数据丢失是一个主要问题,不应该发生。

我最初将创建X数量的消费者数量,并将继续进行投票。因此,我想更多地了解在这里可能发生的负面情况,影响它们以及如何正确处理它们的情况。

我想进一步了解:

1)消费者处理过程中的网络问题: 当网络短时间回来时会发生什么?Kafka消费者是否会自动处理它并在网络返回时变得活着,还是我们必须重新开始它们?如果他们活着回来,他们是否会从留下的地方恢复工作?例如:消费者X从分区Y读取50个记录。现在,在内部,消费者偏移移至 50。但是,在提出网络问题之前,就会回来。现在,消费者将对上次民意测验的阅读内容有元数据。它可以继续在偏移中提交 50吗?

2)在消费者群体中重新平衡。它们对现有消费者流程的影响 - 现有的工作消费者实例是在重新平衡期间暂停并恢复工作,还是我们必须重新初步?重新平衡会发生多长时间?如果消费者在重新平衡后活着回来,它上次阅读吗?

3)当消费者在重新平衡过程中加入时会发生什么。理想情况下,这再次是一种重新平衡的情况。现在会发生什么?现有的将被丢弃,新的开始或等待现有的重新平衡完成?

当网络短时间返回并回来时会发生什么?Kafka消费者会自动处理它并在网络返回时变得活着,还是我们必须重新定位它们?

消费者将尝试重新连接。如果消费者群体协调员没有得到心跳,或者经纪人不对经纪人做出反应,那么团体的重新平衡。

如果他们活着回来,他们是否从留下来的地方恢复工作?

是从最后一个承诺的偏移开始,是的。

现有工作的消费者实例是否会暂停并在重新平衡期间恢复工作

它将暂停并恢复。无需采取行动。

重新平衡会发生多长时间?

在许多因素上有所不同,并且在某些条件下可能无限期地发生。

如果消费者重新平衡后,消费者回来了,它是否有元数据?

最后承诺的偏移存储在经纪人上,而不是由消费者存储在经纪人上。

现有的将被丢弃,新开始或等待现有的重新平衡完成?

在任何民意调查继续进行之前,所有再生都必须完成。

最新更新