Kafka 突然重置了消费者偏移量。

5
我正在使用Kafka 0.8和zookeeper 3.3.5。实际上,我们有十几个主题,我们可以消费而没有任何问题。
最近,我们开始提供和消费一个新的主题,它表现出奇怪的行为。消费的偏移突然被重置了。它遵循我们设置的自动偏移重置策略(实际上是最小值),但我无法理解为什么该主题突然重置其偏移量。
我正在使用高级别消费者。
以下是我发现的一些错误日志:
我们有一堆这样的错误日志:
[2015-03-26 05:21:17,789] INFO 从代理id:1,host:172.16.23.1,port:9092获取1个主题(MyTopic)的元数据,关联ID为47 (kafka.client.ClientUtils$) [2015-03-26 05:21:17,789] ERROR 生产者连接到172.16.23.1:9092失败(kafka.producer.SyncProducer) java.nio.channels.ClosedByInterruptException at java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:202) at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:681) at kafka.network.BlockingChannel.connect(BlockingChannel.scala:57) at kafka.producer.SyncProducer.connect(SyncProducer.scala:141) at kafka.producer.SyncProducer.getOrMakeConnection(SyncProducer.scala:156) at kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:68) at kafka.producer.SyncProducer.send(SyncProducer.scala:112) at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:53) at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:88) at kafka.consumer.ConsumerFetcherManager$LeaderFinderThread.doWork(ConsumerFetcherManager.scala:66) at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:51)
每次出现此问题时,我都会看到以下警告日志:
[2015-03-26 05:21:30,596] WARN 由于套接字错误而重新连接:null (kafka.consumer.SimpleConsumer)
然后真正的问题就发生了:
[2015-03-26 05:21:47,551] 信息 已连接到172.16.23.5:9092进行生产 (kafka.producer.SyncProducer)
[2015-03-26 05:21:47,552] 信息 与172.16.23.5:9092断开连接 (kafka.producer.SyncProducer)
[2015-03-26 05:21:47,553] 信息 [ConsumerFetcherManager-1427047649942] 添加了分区的获取器ArrayBuffer([[MyTopic,0], initOffset 45268422051 to br
oker id:5,host:172.16.23.5,port:9092])(kafka.consumer.ConsumerFetcherManager)
[2015-03-26 05:21:47,553] 信息 [ConsumerFetcherThread-MyTopic_group-1427047649884-699191d4-0-5], 开始获取 (kafka.consumer.Cons
umerFetcherThread)
[2015-03-26 05:21:50,388] 错误 [ConsumerFetcherThread-MyTopic_group-1427047649884-699191d4-0-5], [MyTopic,0]当前偏移量45268422051超出范围; 将偏移量重置为1948447612(kafka.consumer.ConsumerFetcherThread)
[2015-03-26 05:21:50,490] 错误 [ConsumerFetcherThread-MyTopic_group-1427047649884-699191d4-0-5], [MyTopic,0]当前偏移量1948447612超出范围; 将偏移量重置为1948447612(kafka.consumer.ConsumerFetcherThread)
[2015-03-26 05:21:50,591] 错误 [ConsumerFetcherThread-MyTopic_group-1427047649884-699191d4-0-5], [MyTopic,0]当前偏移量1948447612超出范围; 将偏移量重置为1948447612(kafka.consumer.ConsumerFetcherThread)
[2015-03-26 05:21:50,692] 错误 [ConsumerFetcherThread-MyTopic_group-1427047649884-699191d4-0-5], [MyTopic,0]当前偏移量1948447612超出范围; 将偏移量重置为1948447612(kafka.consumer.ConsumerFetcherThread)

现在问题是: 有谁已经遇到过这种情况吗? 有没有人能告诉我当Kafka决定重置其偏移量时,auto.offset.reset是最大还是最小?

谢谢。


我也遇到了同样的问题,你找到了任何额外的信息吗? - spuder
嗨,spuder,我们不再遇到这个问题了,但说实话,我们真的不知道它为什么消失了。我们发现其中一个代理存在缺陷,并且与zookeeper联系存在问题。我知道这不是一个充分的答案,但你尝试重新启动kafka代理了吗?似乎这解决了我们的问题。 - Gnarik
看起来与这个问题相关:https://dev59.com/Y2Eh5IYBdhLWcg3wTB_2 我怀疑这是在与zookeeper通信时超时过于激进的问题。 - spuder
我也面临着同样的问题...你找到解决方案了吗?如果有,请告诉我应该怎么做? - Sachin M Sharma
请查看 https://cwiki.apache.org/confluence/display/KAFKA/KIP-211%3A+Revise+Expiration+Semantics+of+Consumer+Group+Offsets。但也请注意 https://issues.apache.org/jira/browse/KAFKA-10007。 - Raman
1个回答

4

发生的情况是您的主题被解析得太慢了一段时间。

Kafka有一个保留模型,它不是基于消费者是否获取了数据,而是基于磁盘使用率和/或时间段。在某些时候,您会变得太晚了,您需要的下一条消息已经被清除,并且由于kafka已经清理了数据,因此不再可用。因此出现了“Current offset 45268422051 for partition [MyTopic,0] out of range; reset offset to 1948447612”这样的消息。

然后您的消费者将应用重置策略以重新引导自己,例如使用最小值。

当您拥有突发工作流并且有时会跌落到数据保留范围之外时,这是一个常见问题。它可能会消失,因为您提高了解析速度,或者增加了保留策略以便能够承受突发情况。


你能为此推荐适当的解决方案吗?由于最近进行了偏移重置,Secor已停止从Kafka备份任何内容,并抛出许多这些错误。 - user1832464
1
视情况而定。如果您平均拥有足够的解垛速度,则增加保留以应对突发事件。否则,将Scala Secor水平扩展以处理流量。请注意,如果Secor现在根本没有备份任何内容,则肯定不是同一个问题。 - C4stor
我们也遇到了这个问题。是否有可能是当代理程序旋转相应的主题-分区日志文件时,客户端重新连接并使用一个偏移量,该偏移量不再与新旋转的主题-分区日志文件的起始偏移量匹配时发生的? - jsh
这并不是真正依赖于文件。但由于文件轮换实际上会使代理可用的最小偏移量增加,所以是可能的。 - C4stor
只要消费者组保持活动状态(https://issues.apache.org/jira/browse/KAFKA-4682),这种行为在Kafka 2.1.0+中不应再发生,但是仍然可能存在相关的错误(https://issues.apache.org/jira/browse/KAFKA-10007)。 - Raman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接