卡夫卡消费者再平衡及其影响

时间:2019-03-18 02:30:43

标签: apache-kafka kafka-consumer-api kafka-rebalance

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

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

我想了解更多有关:

1)消费者处理期间的网络问题:      当网络短暂中断并返回时会发生什么? Kafka消费者会自动处理此问题并在网络恢复时恢复运行吗,还是必须重新初始化它们?如果他们还活着回来,他们会从离开的地方继续工作吗? 例如:消费者X从分区Y读取了50条记录。现在内部,消费者偏移量移至+50。但是在提交网络问题之前,它又恢复了生命。现在,消费者将拥有有关上一次民意调查所读取内容的元数据。它可以继续提交+50的偏移量吗?

2)重新平衡消费群体。它们对现有消费者流程的影响-现有的正在使用的消费者实例是否会在重新平衡期间暂停并恢复工作,还是我们必须重新初始化它们?重新平衡能持续多长时间?如果消费者在重新平衡后又恢复了生命,是否有上次读取的元数据?

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

请帮助我理解这些方案的细节,并在可能的情况下提出解决方案。如果您可以向我提供参考资源-在线文章/书籍或任何可提供对Kafka复杂细节的深入了解的东西,那也将大有帮助。

1 个答案:

答案 0 :(得分:0)

当网络短暂中断并返回时会发生什么?卡夫卡消费者会自动处理此问题并在网络恢复时恢复运行吗?还是我们必须重新初始化它们?

使用者将尝试重新连接。如果消费者组协调员没有收到心跳信号,或者经纪人不响应经纪人,则该组将重新平衡。

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

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

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

它将暂停并恢复。无需采取任何措施。

重新平衡能持续多长时间?

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

如果消费者在重新平衡后又恢复了生命,是否有上次读取的元数据?

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

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

所有重新平衡必须完成,然后才能继续进行任何轮询。