Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java创建“KafkaServer”_Java_Scala_Apache Kafka - Fatal编程技术网

从Java创建“KafkaServer”

从Java创建“KafkaServer”,java,scala,apache-kafka,Java,Scala,Apache Kafka,我正在尝试从Java启动Kafka服务器 具体来说,我如何将Scala的代码转换成Java代码行 private val server = new KafkaServer(serverConfig, kafkaMetricsReporters = reporters) 我可以轻松创建serverConfig,但似乎无法创建kafkaMetricsReporters参数 注意:我可以创建一个KafkaServerStartable,但我希望创建一个正常的KafkaServer,以避免JVM在

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

具体来说,我如何将Scala的代码转换成Java代码行

  private val server = new KafkaServer(serverConfig, kafkaMetricsReporters = reporters)
我可以轻松创建serverConfig,但似乎无法创建
kafkaMetricsReporters
参数

注意:我可以创建一个
KafkaServerStartable
,但我希望创建一个正常的
KafkaServer
,以避免JVM在出现错误时退出


Apache-Kafka版本0.11.0.1

kafkaMetricsReporters参数是一个scala
Seq

您可以:

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

    您需要导入
    scala.collection.JavaConverters

    List<KafkaMetricsReporter> reportersList = new ArrayList<>();
    ...
    Seq<KafkaMetricsReporter> reportersSeq = JavaConverters.asScalaBufferConverter(reportersList).asScala();
    
  • 另外,
    KafkaServer
    构造函数在从Java调用时还需要另外两个参数:

    • time
      可以使用
      new org.apache.kafka.common.utils.SystemTime()轻松创建
    • threadnameffix
      是一个选项。如果导入
      scala.Option
      ,则可以调用
      Option.apply(“前缀”)
    总而言之:

    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();
    
    Properties=newproperties();
    道具。放(…);
    Kafkanconfig config=Kafkanconfig.fromProps(道具);
    Seq reporters=KafkaMetricsReporter$.MODULE$.startReporters(新的可验证属性(props));
    KafkaServer服务器=新的KafkaServer(配置,new SystemTime(),Option.apply(“前缀”),reporters);
    server.startup();
    
    谢谢:)两个问题:你是说
    记者列表
    而不是
    记者
    newsystemtime()
    来自哪里(哪个软件包)?也意味着不会有记者,对吗?(我现在对此很满意,尽管我会在某个时候创建一些)我已经更新了我的答案
    startReporters()
    可能是您想要使用的,非常感谢!我现在可以启动服务器了,尽管我仍然向它传递了一个空的reporter seq,因为我得到了
    未处理的java.lang.ClassNotFoundException kafka.metrics.KafkaMetricsReporter$.MODULE$
    startReporters
    是静态函数吗?即使我不能调用
    KafkaMetricsReporter.startReporters()
    ,我也接受了你的答案。我有一个卡夫卡服务器在运行,这是这里的重点。谢谢
    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();