Java Kafka-来自同一组的多个使用者分配了相同的分区

Java Kafka-来自同一组的多个使用者分配了相同的分区,java,apache-kafka,kafka-consumer-api,Java,Apache Kafka,Kafka Consumer Api,我已经在卡夫卡用户邮件列表上发布了这篇文章,但没有得到任何回复,所以我想我也会在这里尝试一下 我目前正在尝试将我的软件从0.8.2升级到使用Kafka 0.9。我正在努力 切换到新的消费者API,以便在添加或删除机器时重新平衡 来自我们的集群。我遇到了一个问题,一个主题上的同一个分区正在被删除 当一台机器添加到组中时,在短时间内分配给多个使用者。 这导致一些消息被多次处理,而我的目标是 就一次。我按照Javadocs中的设置说明使用外部数据存储 用于在消费和再平衡时保存补偿 在我的测试集群中,我

我已经在卡夫卡用户邮件列表上发布了这篇文章,但没有得到任何回复,所以我想我也会在这里尝试一下

我目前正在尝试将我的软件从0.8.2升级到使用Kafka 0.9。我正在努力 切换到新的消费者API,以便在添加或删除机器时重新平衡 来自我们的集群。我遇到了一个问题,一个主题上的同一个分区正在被删除 当一台机器添加到组中时,在短时间内分配给多个使用者。 这导致一些消息被多次处理,而我的目标是 就一次。我按照Javadocs中的设置说明使用外部数据存储 用于在消费和再平衡时保存补偿

在我的测试集群中,我最初使用两台机器和一个生产者。一切 一开始工作正常,每个使用者获得一半的分区。当我加上第三个 机器分配了一部分分区,但这些分区没有从中撤销 最初的两台机器之一。下面是我的程序中的一些日志语句,希望如此 它们有助于说明我的情况

分区14最初分配给机器1。机器1在运行之前读取了大量消息 添加机器3。分区14在启动时分配给机器3,但分区14已被删除 未从计算机1中撤销。然后,两台机器在发送前的偏移量3处读取相同的消息 系统重新平衡,两者都有权撤销对分区14的访问。然后分配机器2 从机器1撤销分区14后,仍将其分配给机器3。之后 它从机器3中被撤销,机器2是唯一可以访问分区14的机器

机器1(启动时打开)

机器2(启动时打开)

机器3(几分钟后打开)

我的集群正在运行Cloudera5.7.0,Kafka版本为2.0.1-1.2.0.1。p0.5对应 卡夫卡版本0.9.0.0+kafka2.0.1+283。()

谁能帮我解释一下我做错了什么?如果有任何进一步的信息,我可以
提供帮助请让我知道,如果可以,我很乐意提供。

请检查消费者的组id。如果可能,请更新消费者配置以了解更多详细信息请检查消费者的组id。如有可能,请更新消费者配置以了解更多详细信息
2016-08-24 14:17:08 DEBUG KafkaStreamReader:351 - ASSIGNED: Assigning partition 14 for topic
assignments to worker with offset 0
2016-08-24 14:18:48 DEBUG KafkaStreamReader:312 - Committing topic assignments partition 14
offset 3
2016-08-24 14:19:38 DEBUG KafkaStreamReader:200 - partition = 14, offset = 3 (Message read
from kafka)
2016-08-24 14:19:38 DEBUG KafkaStreamReader:312 - Committing topic assignments partition 14
offset 4
2016-08-24 14:19:39 DEBUG KafkaStreamReader:338 - REVOKED: Committing for partition 14 of
topic assignments offset 4
2016-08-24 14:19:51 DEBUG KafkaStreamReader:351 - ASSIGNED: Assigning partition 14 for topic
assignments to worker with offset 4
2016-08-24 14:19:21 DEBUG KafkaStreamReader:351 - ASSIGNED: Assigning partition 14 for topic
assignments to worker with offset 3
2016-08-24 14:19:48 DEBUG KafkaStreamReader:200 - partition = 14, offset = 3 (Message read
from kafka - already read by machine 1)
2016-08-24 14:20:00 DEBUG KafkaStreamReader:338 - REVOKED: Committing for partition 14 of
topic assignments offset 4