12

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

    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 属性),是否有可能?

4

2 回答 2

8

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

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

请注意,最近发布的 Kafka 0.8.1+ 提供的 API 与 Kafka 0.8.0(Biks 在其链接回复中使用)略有不同。我添加了一个代码示例来在 Kafka 0.8.1+ 中创建一个主题,以回答我如何使用Biks 上面提到的 API 从 IDE 在 Kafka 中创建一个主题的问题。

于 2014-04-29T09:10:38.507 回答
0

`

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();`
于 2017-04-24T14:02:29.570 回答