在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属性),那么这是可能的吗?
答案 0 :(得分:8)
注意:我的答案涵盖Kafka 0.8.1+,即截至2014年4月的最新稳定版本。
是的,您可以通过Kafka API以编程方式创建主题。是的,您可以指定所需的分区数以及主题的复制因子。
请注意,最近发布的Kafka 0.8.1+提供的API与Kafka 0.8.0(Biks在其链接的回复中使用)略有不同。我在回答Biks上面提到的问题code example to create a topic in Kafka 0.8.1+时添加了How Can we create a topic in Kafka from the IDE using API。
答案 1 :(得分: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();`