【发布时间】:2019-08-08 09:16:33
【问题描述】:
我是 Kafka 的新手,我正在尝试在 Java 和 Go(使用 Confluent/Kafka-Go)中设计一个包装库,以便 Kafka 在内部使用。对于我的用例,CommitSync 是一个关键步骤,我们应该在正确提交旧的之后进行只读操作。重复处理不是什么大问题,我们的客户端服务足够幂等。但数据丢失是个大问题,不应该发生。
我最初将创建 X 个消费者,并将继续从他们那里进行轮询。因此,我想更多地了解这里可能发生的负面情况、它们的影响以及如何正确处理它们。
我想了解更多:
1) 消费者处理过程中的网络问题: 当网络短暂中断并恢复时会发生什么? Kafka 消费者是否会自动处理此问题并在网络恢复时激活,还是我们必须重新初始化它们?如果他们活着回来,他们会从离开的地方恢复工作吗? 例如:消费者 X 从分区 Y 读取 50 条记录。现在在内部消费者偏移量移动到 +50。但在提交网络问题发生之前,它又回来了。现在,消费者将获得关于上次投票所读取内容的元数据。它可以继续提交+50的偏移量吗?
2) 消费者群体的再平衡。它们对现有消费者进程的影响——现有的工作消费者实例是否会在重新平衡期间暂停和恢复工作,还是我们必须重新初始化它们?再平衡可以发生多长时间?如果消费者在重新平衡后恢复活跃,它是否有关于它上次读取的元数据?
3) 当消费者在再平衡期间加入时会发生什么。理想情况下,这又是一个再平衡方案。现在会发生什么?现有的将被丢弃并开始新的,还是将等待现有的重新平衡完成?
【问题讨论】:
标签: apache-kafka kafka-consumer-api