Offset 重新启动Kafka python多处理器使用者将再次使用队列中的所有消息

Offset 重新启动Kafka python多处理器使用者将再次使用队列中的所有消息,offset,apache-kafka,Offset,Apache Kafka,参考: 我对卡夫卡还不熟悉,我也在尝试与管理层打交道 使用ApacheKafka的最新版本(0.8.1.1.)以及从pypi安装的Kafka python 0.9.2(最后一次上载于2014年8月27日),这与github上当前的主分支不同 使用“SimpleConsumer”=>进行测试时,崩溃并重新启动脚本将使用来自上一个已知偏移量的消息 使用“MultiProcessConsumer”=>崩溃并重新启动时,脚本将从偏移量“0”重新启动消耗 我的小脚本(多处理器用户): 我可以通过以下方式检

参考:

我对卡夫卡还不熟悉,我也在尝试与管理层打交道

使用ApacheKafka的最新版本(0.8.1.1.)以及从pypi安装的Kafka python 0.9.2(最后一次上载于2014年8月27日),这与github上当前的主分支不同

使用“SimpleConsumer”=>进行测试时,崩溃并重新启动脚本将使用来自上一个已知偏移量的消息

使用“MultiProcessConsumer”=>崩溃并重新启动时,脚本将从偏移量“0”重新启动消耗

我的小脚本(多处理器用户):

我可以通过以下方式检查偏移:

consumer.offsets
{0: 0, 1: 0}
然后,我运行:

A = consumer.get_messages(count=1235)
consumer.offsets
{0: 1235, 1: 0}
再次崩溃并重新启动脚本后,第一次调用“consumer.offset”返回“{0:1235,1:0}”,这很好。但是跑步:

A.consumer.get_messages(count=388)
consumer.offsets
{0: 388, 1: 0}
你知道如何处理这个问题吗?此外,是否有任何方法可以正确地更改多处理器使用者偏移量以从定义的位置开始

谢谢你的帮助

编辑: 在深入了解kafka python库源代码并检查GitHub上的问题之后, 见:

所以问题在于,当主多处理机使用者启动子进程时,它会在主题的每个分区上将其偏移量初始化为“0”(因为子进程的autocommit设置为false),而不是给它们正确的值


请参阅GitHub上的“mahall”注释。

这取决于消费者请求kafka代理进行抵消的方式。在Java中,您很可能正在做类似的事情

readOffset = getLastOffset(consumer,topic, partition, kafka.api.OffsetRequest.EarliestTime(), clientName);
试试这样的

readOffset = getLastOffset(consumer,topic, partition, kafka.api.OffsetRequest.LatestTime(), clientName);
readOffset = getLastOffset(consumer,topic, partition, kafka.api.OffsetRequest.LatestTime(), clientName);