我们正面临与此thread中所述的相同问题。
此处-Samza请求的Kafka分区偏移量过旧(即Kafka日志已向前移动)。我们正在设置属性
editor.data.set("<p>Testing</p>");
到consumer.auto.offset.reset
,因此希望Samza在这种情况下将其检查点重置为最早可用的分区偏移量。但这并没有发生,我们一直在不断收到这种形式的例外情况:
smallest
版本详细信息
浏览代码,看来INFO [2018-08-21 19:26:20,924] [U:669,F:454,T:1,123,M:2,658]
kafka.producer.SyncProducer:[Logging_class:info:66] - [main] -
Disconnecting from vrni-platform-release:9092
INFO [2018-08-21 19:26:20,924] [U:669,F:454,T:1,123,M:2,658]
system.kafka.GetOffset:[Logging_class:info:63] - [main] - Validating offset
56443499 for topic and partition Topic3-0
WARN [2018-08-21 19:26:20,925] [U:669,F:454,T:1,123,M:2,658]
system.kafka.KafkaSystemConsumer:[Logging_class:warn:74] - [main] - While
refreshing brokers for Topic3-0:
org.apache.kafka.common.errors.OffsetOutOfRangeException: The requested
offset is not within the range of offsets maintained by the server..
Retrying
应该能够捕获异常GetOffset::isValidOffset
并将其转换为错误值。但是看来这没有发生。 OffsetOutOfRangeException
中的package
是否不匹配? GetOffSet类正在赶上
例外Exception
,但从日志来看,此类的程序包似乎有所不同。这可能是原因吗?
import kafka.common.OffsetOutOfRangeException
另外,它似乎是BrokerProxy类-def isValidOffset(consumer: DefaultFetchSimpleConsumer, topicAndPartition: TopicAndPartition, offset: String) = {
info("Validating offset %s for topic and partition %s" format (offset, topicAndPartition))
try {
val messages = consumer.defaultFetch((topicAndPartition, offset.toLong))
if (messages.hasError) {
KafkaUtil.maybeThrowException(messages.error(topicAndPartition.topic, topicAndPartition.partition).exception())
}
info("Able to successfully read from offset %s for topic and partition %s. Using it to instantiate consumer." format (offset, topicAndPartition))
true
} catch {
case e: OffsetOutOfRangeException => false
}
}
的调用者将在获得错误值的情况下打印日志GetOffset
,但不会记录此行(指示在"It appears that..."
方法中生成的某些异常未捕获并向上传播):
GetOffset
这可能是由于我们正在使用的Kafka客户端库版本不匹配吗? 是否有建议的Samf 0.14.1推荐使用的Kafka客户端版本(假设Kafka服务器为1.x)?
任何对此的帮助将不胜感激。