2017-08-25 14 views
1

我们有v0.8.2的消费者,我们正在更新到v0.10.2。这些是大量应用程序,所以我们通常会进行滚动更新。问题在于,v8消费者在向v10消费者提交kafka时向动物园管理员提交补偿。在我们的测试中,尝试运行混合使用v8和v10的消费者会导致消息被双重使用。在这里看到更详细的问题的写法:http://www.search-hadoop.com/m/Kafka/uyzND1ymwxk17UWdj?subj=Re+kafka+0+10+offset+storage+on+zookeeperkafka消费者从v0.8.2开始的更新 - > 0.10.2

有没有人找到解决办法,以便我们可以从v8更新到v10消费者,而不会中断?

回答

0

这里有两件事我建议。

  1. 在不同的步骤中进行版本升级和API升级。您可以滚动升级到0.10,并继续使用旧的使用者API并向zookeeper提交补偿。然后在第二步中执行您的API更新。这将减少每步移动部件的数量。

  2. 在进行API更新时,您必须进行某种完全切换,因为您已经观察到,消费者组信息和偏移量现在将存储在Kafka中。有一两件事可以做,以帮助这是这里 https://kafka.apache.org/documentation/#offsetmigration

然而,这个消费群体正在不同的协调(在它们在动物园管理员正在协调无论你在哪里犯偏移旧版本),因此在一些您需要停止所有旧用户并启动新的API实施。首先迁移您的偏移量应该使其成为非常短暂的中断而不会丢失数据,无论持续时间如何,都会导致所有消费者宕机并启动新的消息。

+0

感谢指向偏移迁移的指针。如果我们需要将v10客户端恢复到v8,那么这可能会非常有用。 –