【问题标题】:Kafka 0.8, is it possible to create topic with partition and replication using java code?Kafka 0.8,是否可以使用 java 代码创建具有分区和复制的主题?
【发布时间】:2013-08-16 00:34:09
【问题描述】:

在 Kafka 0.8beta 中,可以使用如下所示的命令创建主题 here

    bin/kafka-create-topic.sh --zookeeper localhost:2181 --replica 2 --partition 3 --topic test

上述命令将创建一个名为“test”的主题,其中包含 3 个分区和每个分区 2 个副本。

我可以用 Java 做同样的事情吗?

到目前为止,我发现使用 Java 我们可以创建如下所示的生产者

    Producer<String, String> producer = new Producer<String, String>(config);
    producer.send(new KeyedMessage<String, String>("mytopic", msg));

这将创建一个名为“mytopic”的主题,其分区数使用“num.partitions”属性指定并开始生成。

但是有没有办法定义分区和复制呢?我找不到任何这样的例子。如果我们不能,那是否意味着我们总是需要在之前创建带有分区和复制的主题(根据我们的要求),然后使用生产者在该主题中生成消息。例如,如果我想以相同的方式创建“mytopic”,但分区数量不同(覆盖 num.partitions 属性),是否有可能?

【问题讨论】:

  • 到目前为止我发现,使用kafka.javaapi.producer.Producer API 可以创建主题,但分区数将基于配置文件中num.partitions 属性中提到的值。要使用自定义分区创建主题,我认为唯一的方法是使用上面提到的控制台脚本。在这种情况下,必须先创建主题,然后生产者才能开始生产。
  • 我已经在下面提到的链接Create Kafka Topic using Java 中回复了同样的问题如果您需要任何进一步的帮助或代码 sn-p。让我知道我将与 maven 依赖共享代码

标签: apache-kafka


【解决方案1】:

注意:我的回答涵盖 Kafka 0.8.1+,即 2014 年 4 月可用的最新稳定版本。

是的,您可以通过 Kafka API 以编程方式创建主题。是的,您可以指定所需的分区数以及主题的复制因子。

请注意,最近发布的 Kafka 0.8.1+ 提供的 API 与 Kafka 0.8.0 略有不同(Biks 在其链接回复中使用了该 API)。我在对 Biks 上面提到的问题 How Can we create a topic in Kafka from the IDE using API 的回复中添加了 code example to create a topic in Kafka 0.8.1+

【讨论】:

  • 这个例子在Java中不起作用,或者至少我不知道如何让它编译。
  • 你是对的——示例代码在 Scala 中。所以不幸的是,您不能只是将其复制粘贴到您的 Java 代码中。
【解决方案2】:

`

import kafka.admin.AdminUtils;
import kafka.cluster.Broker;
import kafka.utils.ZKStringSerializer$;
import kafka.utils.ZkUtils;

String zkConnect = "localhost:2181";
ZkClient zkClient = new ZkClient(zkConnect, 10 * 1000, 8 * 1000, ZKStringSerializer$.MODULE$);
ZkUtils zkUtils = new ZkUtils(zkClient, new ZkConnection(zkConnect), false);
    Properties pop = new Properties();
    AdminUtils.createTopic(zkUtils, topic.getTopicName(), topic.getPartitionCount(), topic.getReplicationFactor(),
            pop);
    zkClient.close();`

【讨论】:

    猜你喜欢
    • 2015-12-22
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2020-06-22
    • 2020-05-29
    相关资源
    最近更新 更多