首页 > 解决方案 > Kafka消费者再平衡及其影响

问题描述

我是 Kafka 的新手,我正在尝试在 Java 和 Go(使用 Confluent/Kafka-Go)中设计一个包装库,以便 Kafka 在内部使用。对于我的用例,CommitSync 是一个关键步骤,我们应该在正确提交旧的之后进行只读操作。重复处理不是什么大问题,我们的客户端服务足够幂等。但是数据丢失是一个主要问题,不应该发生。

我最初将创建 X 个消费者,并将继续从他们那里轮询。因此,我想更多地了解这里可能发生的负面情况,它们的影响以及如何正确处理它们。

我想了解更多:

1)消费者处理过程中的网络问题:当网络短时间掉线又回来时会发生什么?Kafka 消费者是否会自动处理此问题并在网络恢复时激活,还是我们必须重新初始化它们?如果他们活着回来,他们会从离开的地方恢复工作吗?例如:消费者 X 从分区 Y 读取 50 条记录。现在在内部消费者偏移量移动到 +50。但在提交网络问题发生之前,它又回来了。现在,消费者将获得关于上次投票所读取内容的元数据。它可以继续提交+50的偏移量吗?

2)消费群体的再平衡。它们对现有消费者进程的影响——现有的工作消费者实例是否会在重新平衡期间暂停和恢复工作,或者我们是否必须重新初始化它们?再平衡可以发生多长时间?如果消费者在重新平衡后恢复活力,它是否有关于它上次读取的元数据?

3)当消费者在再平衡期间加入时会发生什么。理想情况下,这又是一个再平衡的场景。现在会发生什么?现有的将被丢弃,新的开始还是等待现有的重新平衡完成?

标签: apache-kafkakafka-consumer-api

解决方案


当网络短暂中断并恢复时会发生什么?Kafka 消费者是否会自动处理此问题并在网络恢复时激活,还是我们必须重新初始化它们?

消费者将尝试重新连接。如果消费者组协调器没有收到心跳或代理没有响应代理,则组重新平衡。

如果他们活着回来,他们会从离开的地方恢复工作吗?

从上次提交的偏移量开始,是的。

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

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

再平衡可以发生多长时间?

因许多因素而异,并且在某些条件下可能无限期地发生。

如果消费者在重新平衡后恢复活力,它是否有关于它上次读取的元数据?

最后提交的偏移量存储在代理上,而不是消费者。

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

所有重新平衡必须在任何投票继续之前完成。


推荐阅读