【问题标题】:create `KafkaServer` from Java从 Java 创建 `KafkaServer`
【发布时间】:2018-04-09 23:38:15
【问题描述】:

我正在尝试从 Java 启动 Kafka 服务器

具体来说,如何将Scala的this line翻译成一行Java?

  private val server = new KafkaServer(serverConfig, kafkaMetricsReporters = reporters)

我可以轻松创建 serverConfig,但我似乎无法创建 kafkaMetricsReporters 参数。

注意:我可以创建一个KafkaServerStartable,但我想创建一个普通的KafkaServer,以避免出现错误时JVM退出。

Apache Kafka 版本 0.11.0.1

【问题讨论】:

    标签: java scala apache-kafka


    【解决方案1】:

    kafkaMetricsReporters 参数是一个 scala Seq。

    您可以:

    1. 创建 Java 集合并将其转换为 Seq:

      你需要导入scala.collection.JavaConverters:

      List<KafkaMetricsReporter> reportersList = new ArrayList<>();
      ...
      Seq<KafkaMetricsReporter> reportersSeq = JavaConverters.asScalaBufferConverter(reportersList).asScala();
      
    2. 使用KafkaMetricsReporter.startReporters() 方法从您的配置中为您创建它们:

      由于KafkaMetricsReporter 是一个单例,您需要使用MODULE 表示法来使用它:

      Seq<KafkaMetricsReporter> reporters = KafkaMetricsReporter$.MODULE$.startReporters(new VerifiableProperties(props));
      

    KafkaServer 构造函数还有 2 个其他参数,在从 Java 调用它时需要:

    • time 可以使用 new org.apache.kafka.common.utils.SystemTime() 轻松创建
    • threadNamePrefix 是一个选项。如果导入scala.Option,就可以调用Option.apply("prefix")

    把它们放在一起:

    Properties props = new Properties();
    props.put(...);
    KafkaConfig config = KafkaConfig.fromProps(props);
    Seq<KafkaMetricsReporter> reporters = KafkaMetricsReporter$.MODULE$.startReporters(new VerifiableProperties(props));
    KafkaServer server = new KafkaServer(config, new SystemTime(), Option.apply("prefix"), reporters);
    server.startup();
    

    【讨论】:

    • 谢谢 :) 两个问题:您的意思是 reportersList 而不是 reporters? new SystemTime() 来自哪里(哪个包)?
    • 还有,这意味着没有记者,对吗? (目前我对此很好,尽管我必须在某些时候创建一些)
    • 我已经更新了我的答案。 startReporters() 可能是你想用的
    • 非常感谢!我现在可以启动一个服务器,尽管我仍然给它传递了一个空的记者序列,因为我得到了 Unhandled java.lang.ClassNotFoundException kafka.metrics.KafkaMetricsReporter$.MODULE$ 。 startReporters 是静态函数吗?
    • 即使我无法致电KafkaMetricsReporter.startReporters(),我也已接受您的回答。我有一个 kafka 服务器正在运行,这就是这里的重点。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-05-03
    • 2011-09-26
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    相关资源
    最近更新 更多