首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kafka Scala:如何将val移动到try catch块

Kafka Scala:如何将val移动到try catch块
EN

Stack Overflow用户
提问于 2022-05-20 20:39:00
回答 1查看 33关注 0票数 0

我想搬家:

代码语言:javascript
复制
val kafkaPartitionOffset = kafkaConsumer.endOffsets(consumedPartitions.asJava)

进入try catch块,如下所示:

代码语言:javascript
复制
val kafkaPartitionOffset : SomeClass = 
            try {
               kafkaConsumer.endOffsets(consumedPartitions.asJava)
            } catch {
              case e: Exception => {
                log.error(s"${consumerGroupId} Could not get Kafka offset", e)
                None
              }
            }

但是我在SomeClass应该是什么的问题上有困难。我试过Map[TopicPartition, Long],但上面写着Type mismatch。任何帮助都是感激的,谢谢!

更新:,我也尝试过Any,但是我无法在下面执行kafkaPartitionOffset.get(topicPartition) (get用错误消息cannot resolve symbol get高亮显示

代码语言:javascript
复制
        for((topicPartition,OffsetAndMetadata) <- mapTopicPartitionOffset){
          
          val bbCurrentOffset =  OffsetAndMetadata.get(topicPartition)

          // latest offset
          val partitionLatestOffset = kafkaPartitionOffset.get(topicPartition)

          // Log for a particular partition
          val delta = partitionLatestOffset - bbCurrentOffset

          topicOffsetList += delta.abs

        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-20 21:15:27

看一看这个:

代码语言:javascript
复制
val x = try { 
  throw new RuntimeException("runtime ex")
  "some string"
} catch { case _: RuntimeException => 2 }

编译器需要在运行时之前知道x的类型,因为x可以在代码中的其他地方使用,对吗?所以编译器说:

"Hmm,这个文字“string”是那种类型的类型,而文本2是那种类型的是什么类型呢?“

所以它寻找字符串和Int的最低超级类型,在本例中是Any!所以val x: Any = ...。现在我不知道kafkaConsumer.endOffsets(...)返回的表达式是什么,如果它返回Option[T],那么SomeClass也将是Option[T],因为在catch块中不返回任何一个,如果不返回,就不要在那里使用None,因为没有其他的方法适合,有更好的异常处理方法。

但是无论如何,Scala提供了一些实用程序类型,以尽可能避免这种尝试捕获,我建议您在本例中使用Try

代码语言:javascript
复制
val kafkaPartitionOffset: Try[Whatever-endOffsets-returns] = 
  Try(kafkaConsumer.endOffsets(consumedPartitions.asJava))

另外,问题的标题与实际问题不符,请考虑更改标题:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72324555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档