【问题标题】:Start Zookeeper and Kafka through java code通过java代码启动Zookeeper和Kafka
【发布时间】:2019-04-03 13:52:15
【问题描述】:

昨天我问了this question,我正在尝试遵循我找到的其他一些答案,但它们让我无处可去。我真的不明白如何从代码中正确设置 Zookeeper 和 Kafka 服务器。到目前为止我所做的是:


Properties prop = new Properties();

prop.setProperty("dataDir","C:\\kafka_2.12-2.2.0\\config\\zookeeper.properties");
prop.setProperty("bootstrap.servers", "localhost:2181");

QuorumPeerConfig quorumConfiguration = new QuorumPeerConfig();

try {
     quorumConfiguration.parseProperties(prop);
} catch(Exception e) {
   throw new RuntimeException(e);
}
            
ZooKeeperServerMain zookeeper = new ZooKeeperServerMain();
            
final ServerConfig configuration = new ServerConfig();

configuration.readFrom(quorumConfiguration);
            
            new Thread() {
                public void run() {
                    try {
                        zookeeper.runFromConfig(configuration);
                    } catch (IOException e) {
                        
                    }
                }
            }.start();
            
                    
             Properties props = new Properties();
             props.put("bootstrap.servers", "localhost:9092");
             props.put("acks", "all");
             props.put("retries", 0);
             props.put("batch.size", 16384);
             props.put("linger.ms", 1);
             props.put("buffer.memory", 33554432);
             props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
             props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
    
             KafkaProducer<String, String> producer = new KafkaProducer<String, String>(props);
             for (int i = 0; i < 100; i++)
                 producer.send(new ProducerRecord<String, String>("info", Integer.toString(i), Integer.toString(i)));

producer.close();

我找不到比这更多的东西了。

【问题讨论】:

  • 你有什么问题?
  • @howie 我想直接从java代码启动zookeeper和kafka而不使用cmd行
  • 那么你想在你的服务器中嵌入一个 zookeeper 和 kafka 吗?
  • 基本上是的,我正在使用 localhost,直到现在我一直从命令行启动它们
  • 你正在尝试做的事情是零意义的。按预期分别启动 Zookeeper 和 Kafka。

标签: java apache-kafka


【解决方案1】:

强烈推荐使用*-server-start 命令...它们正确设置了类路径。

否则,看起来您只是在尝试编写简单的测试,而嵌入式 Kafka 的库已经存在。例如https://github.com/embeddedkafka/embedded-kafkausing Docker

【讨论】:

  • 嗨,我不是在写测试,我只是想在启动程序时直接从 java 启动它们......无论如何谢谢你的提示
  • 如果您查看这些类的源代码,您仍然可以使用相同的概念。对于 Kafka,主类是 KafkaServerStartable... 而 Junit 不是必需的,只是拥有 main 方法的另一种方式。你可以在这里看到另一个例子gist.github.com/fjavieralba/7930018 ...在你的问题中,你只启动了 Zookeeper,而不是 Kafka,所以 KafkaProducer 不会工作。
猜你喜欢
  • 2019-08-23
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多