0

我是 Storm Flux 的新手,现在对如何在 Storm Flux 中配置通用参数感到困惑。例如,org.apache.storm.kafka.sourt.KafkaSpout 定义如下:

 public class KafkaSpout<K, V> extends BaseRichSpout {

    ....

 }

还有一个使用此类的示例 YAML 文件:

  components:
    - id: "onlyValueRecordTranslator"
      className: "org.apache.storm.flux.examples.OnlyValueRecordTranslator"

    - id: "spoutConfigBuilder"
      className: "org.apache.storm.kafka.spout.KafkaSpoutConfig$Builder"
      constructorArgs:
         - "localhost:9092"
         - ["myKafkaTopic"]
      properties:
         - name: "firstPollOffsetStrategy"
           value: EARLIEST
         - name: "recordTranslator"
           ref: "onlyValueRecordTranslator"
      configMethods:
         - name: "setProp"
           args:
           - {
                 "key.deserializer" : "org.apache.kafka.common.serialization.StringDeserializer",
                 "value.deserializer": "org.apache.kafka.common.serialization.StringDeserializer"
             }

         - id: "spoutConfig"
           className: "org.apache.storm.kafka.spout.KafkaSpoutConfig"
           constructorArgs:
              - ref: "spoutConfigBuilder"

   config:
        topology.workers: 1

   # spout definitions
   spouts:
       - id: "kafka-spout"
         className: "org.apache.storm.kafka.spout.KafkaSpout"
         constructorArgs:
             - ref: "spoutConfig"

我的问题是为什么 KafkaSpout 的通用参数没有任何配置?

谢谢!

4

1 回答 1

0

我认为没有人发现有必要在 Flux 中实现泛型支持。

回想一下,在 Java 中,您可以随意使用“原始类型”(尽管这通常是个坏主意),也就是说,您可以这样做new ArrayList(),并且就像您编写的那样new ArrayList<Object>()。泛型可以帮助您更具体地确定您希望将哪些类型放入列表中,并让您在编译时捕获类型错误。

Flux 更像是一种解释性语言,您必须将拓扑提交给 Flux 才能知道您的 yaml 是否有效。那时泛型并没有多大意义,特别是因为 Flux 在类型强制方面也非常自由。

于 2018-05-29T15:22:15.740 回答