我是kafka的新手,我正在尝试用java和go(使用confluent/kafka-go)设计一个 Package 器库,供kafka在内部使用。对于我的用例,commitsync是一个关键的步骤,我们应该在正确提交旧的步骤之后执行只读。重复处理不是一个大问题,我们的客户服务是幂等的。但是数据丢失是一个主要问题,不应该发生。
我将创建x个消费者的最初数量,并将继续从他们的投票。因此,我想知道更多关于这里可能发生的负面情况,它们的影响以及如何正确处理它们。
我想知道更多关于:
1) 消费者处理过程中的网络问题:当网络短暂断开并恢复时会发生什么?Kafka消费者是否会自动处理这个问题,并在网络恢复时变得活跃起来,还是我们必须重新初始化它们?如果他们活着回来,他们会从离开的地方继续工作吗?例如:消费者x从分区y读取50条记录。现在在内部消费者抵消移动到+50。但在提交之前,网络问题发生了,并且恢复了活动。现在,消费者将获得关于上次轮询读取内容的元数据。它能在偏移量中继续提交+50吗?
2) 消费者群体的再平衡。它们对现有使用者进程的影响—现有正在工作的使用者示例是否将在重新平衡期间暂停并恢复工作,或者我们是否必须重新初始化它们?再平衡能持续多久?如果消费者在重新平衡后活着回来,它是否有关于它的最后一次读取的元数据?
3) 当消费者在重新平衡过程中加入时会发生什么。理想情况下,这又是一个重新平衡的情景。现在会发生什么?现有的将被丢弃,新的将启动,还是将等待现有的重新平衡完成?
1条答案
按热度按时间7xzttuei1#
当网络短暂消失又恢复时会发生什么?Kafka消费者是否会自动处理这个问题,并在网络恢复时变得活跃起来,还是我们必须重新初始化它们?
消费者将尝试重新连接。如果消费者群体协调人没有收到心跳信号,或者经纪人没有对经纪人做出回应,那么这个群体就会重新平衡。
如果他们活着回来,他们会从离开的地方继续工作吗?
从上一次提交的补偿,是的。
在重新平衡期间,现有正在工作的使用者示例是否将暂停并恢复工作
它将暂停并继续。不需要采取任何行动。
再平衡能持续多久?
因多种因素而变化,在某些条件下可能无限期地发生。
如果消费者在重新平衡后活着回来,它是否有关于它的最后一次读取的元数据?
最后提交的偏移量存储在代理上,而不是由使用者存储。
现有的将被丢弃,新的将启动,还是将等待现有的重新平衡完成?
在投票继续之前,所有的重新平衡必须完成。