5

我正在使用 Kafka 0.8 和 zookeeper 3.3.5。实际上,我们有十几个主题正在消费,没有任何问题。

最近,我们开始喂养和消费一个行为怪异的新主题。消耗的偏移量突然被重置。它尊重我们设置的 auto.offset.reset 策略(实际上是最小的),但我不明白为什么该主题突然重置其偏移量。

我正在使用高级消费者。

这是我发现的一些错误日志:我们有一堆这样的错误日志:

[2015-03-26 05:21:17,789] INFO 从代理 id:1,主机:172.16.23.1,端口:9092 获取元数据,1 个主题集(MyTopic)的相关 id 为 47(kafka.cl
ient.ClientUtils$)
[2015-03-26 05:21:17,789] 错误生产者连接到 172.16.23.1:9092 不成功(kafka.producer.SyncProducer)
java.nio.channels.ClosedByInterruptException
        在 java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:202)
        在 sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:681)
        在 kafka.network.BlockingChannel.connect(BlockingChannel.scala:57)
        在 kafka.producer.SyncProducer.connect(SyncProducer.scala:141)
        在 kafka.producer.SyncProducer.getOrMakeConnection(SyncProducer.scala:156)
        在 kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:68)
        在 kafka.producer.SyncProducer.send(SyncProducer.scala:112)
        在 kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:53)
        在 kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:88)
        在 kafka.consumer.ConsumerFetcherManager$LeaderFinderThread.doWork(ConsumerFetcherManager.scala:66)
        在 kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:51)

每次发生此问题时,我都会看到 WARN 日志:

[2015-03-26 05:21:30,596] WARN 由于套接字错误重新连接:null (kafka.consumer.SimpleConsumer)

然后真正的问题发生了:

[2015-03-26 05:21:47,551] INFO 连接到 172.16.23.5:9092 用于生产(kafka.producer.SyncProducer)
[2015-03-26 05:21:47,552] INFO 从 172.16.23.5:9092 断开连接(kafka.producer.SyncProducer)
[2015-03-26 05:21:47,553] 信息 [ConsumerFetcherManager-1427047649942] 为分区 ArrayBuffer([[MyTopic,0], initOffset 45268422051 添加了 fetcher 到 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 是最大还是最小?

谢谢你。

4

1 回答 1

4

正在发生的事情是你在一段时间内太慢地删除你的主题。

Kafka 有一个保留模型,它不是基于消费者是否获得数据,而是基于磁盘使用情况和/或周期。在某些时候,您为时已晚,并且您需要的下一条消息已经被清除,并且不再可用,因为 kafka 已经清理了数据。因此,Current offset 45268422051 for partition [MyTopic,0] out of range; reset offset to 1948447612消息。

然后,您的消费者应用您的重置策略再次引导自身,在您的情况下是最小的。

当您有突发性工作流时,这是一个常见问题,有时会超出数据保留范围。它可能消失了,因为您提高了脱毛速度,或者增加了保留策略以能够在突发事件中幸存下来。

于 2016-04-07T09:40:14.130 回答